用于group by的tsql聚合字符串

Nao*_*aor 1 sql t-sql sql-server sql-server-2005 group-concat

我有两张桌子:

名称(id,名称)地址(id,name_id,地址)

我想编写一个返回我的查询:名称,地址列表(address1,address2,adress3,..)

就像是:

Select A.name, B.list_of_addresses
From Names A
    Inner Join (Select name_id, /*list_of_addresses with comma between them*/
                From Addresses
                Group By name_id)  B ON A.id=B.name_id
Run Code Online (Sandbox Code Playgroud)

Ric*_*iwi 6

您可以使用For XML作为从SQL Server 2005开始实现该功能的技巧.

Select
    A.name,
    stuff((
        select ',' + B.address
        from Addresses B
        WHERE A.id=B.name_id
        for xml path('')),1,1,'')
From Names A
Run Code Online (Sandbox Code Playgroud)

如果你的地址中没有逗号,那么效果很好,但即使这样做,因为你的请求是在它们之间加上逗号......这可能就像'正确'一样.