Sql 将相关表中列的值连接到字符串中

Sql 将相关表中列的值连接到字符串中,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在SQL Server 2008中有两个表(1-n) 示例:1个人-“n”个地址 我想选择persons数据并将相关地址和地区放入一列(连接) 如何在tsql中做到这一点?经典的方法是对XML路径使用。这个问题也有重复的地方,但即使遵循这些问题,也要确保查询正确 SELECT name, STUFF(( SELECT ', ', districtname AS 'data()' FROM district WHERE ID=PersonID FOR XM

我在SQL Server 2008中有两个表(1-n)

示例:1个人-“n”个地址

我想选择persons数据并将相关地址和地区放入一列(连接)

如何在tsql中做到这一点?

经典的方法是对XML路径使用
。这个问题也有重复的地方,但即使遵循这些问题,也要确保查询正确

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

.

测试数据

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          ║
╚════════════╩═════════════════════════╝

选中此复选框,则此问题的回答质量较低,带有外部链接。这篇文章解释得很好,但我相信这个问题的相关答案将是一些简单明了的信息。谢谢选择这个作为答案,因为它是最干净的。。
╔════════════╦═════════════════════════╗
║    Name    ║         Address         ║
╠════════════╬═════════════════════════╣
║ Daniel     ║ Upper West Side, Harlem ║
║ John Smith ║ Brooklin, SoHo          ║
╚════════════╩═════════════════════════╝