2014-02-21 71 views
-1

我有2个表(1-n)在SQL Server 2008将相关表中列的值连接成一个字符串

例子:1人 - “N”解决

我要选择个人数据,并把相关的地址区成柱(串联)

ID Name 
------------------------------------------ 
1 John Smith 
2 Daniel 

PersonID DistrictName 
------------------------------------------ 
1   Brooklin 
1   SoHo 
2   Upper West Side 
2   Harlem 

SELECT desired 
------------------------------------------ 
John Smith Brooklin, SoHo 
Daniel  Upper West Side, Harlem 

我怎么能做到这一点的TSQL?

+0

选中此http://stackoverflow.com/questions/8516212/ho w-to-concatenate-values-with-same-id-in-sql – SNathan

+0

为什么downvote? –

+0

@SNathan这个问题具有低质量的响应,并带有外部链接。这篇文章很好解释了,但我相信这个问题的相关答案在这里是一些简单的信息。谢谢! –

回答

1

“经典”方法是使用FOR XML PATH。这个问题有重复,但即使如此,查询正确也不是微不足道的;

SELECT name, 
    STUFF((
    SELECT ', ', districtname AS 'data()' 
    FROM district 
    WHERE ID=PersonID 
    FOR XML PATH('')), 1, 2, '') districts 
FROM person; 

An SQLfiddle to test with

+0

选择此为答案,因为是最干净的.. –

1

测试数据

DECLARE @Person TABLE(ID INT,Name VARCHAR(100)) 
INSERT INTO @Person VALUES 
(1,'John Smith'),(2,'Daniel') 

DECLARE @Person_Address TABLE(PersonID INT,DistrictName VARCHAR(1000)) 
INSERT INTO @Person_Address VALUES 
(1,'Brooklin'),(1,'SoHo'), 
(2,'Upper West Side'),(2,'Harlem') 

查询

SELECT P.Name 
     ,STUFF((SELECT ', ' + DistrictName [text()] 
       FROM @Person_Address 
       WHERE PersonID = P.ID 
       FOR XML PATH(''),TYPE). 
       value('.','NVARCHAR(MAX)'),1 ,2,'') AS Address 
FROM @Person P 
GROUP BY P.Name,P.ID 

结果集

╔════════════╦═════════════════════════╗ 
║ Name ║   Address   ║ 
╠════════════╬═════════════════════════╣ 
║ Daniel  ║ Upper West Side, Harlem ║ 
║ John Smith ║ Brooklin, SoHo   ║ 
╚════════════╩═════════════════════════╝ 
相关问题