用于group by的tsql聚合字符串

我有两张桌子:

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

我想编写返回我的查询:
姓名,地址列表(地址1,地址2,地址3,..)

就像是:

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
您可以使用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,'')
From Names A

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

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...