tsql aggregate string for group by

守給你的承諾、 提交于 2019-11-28 06:35:20

问题


I have two tables:

Names(id, name) Addresses(id, name_id, address)

I want to write query that return me: name, address list (address1, address2, adress3, ..)

Something like:

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

回答1:


You can use For XML as a trick to achieve that from SQL Server 2005 onwards.

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

It works well if you don't already have commas in the address, but even if it did, since your request is to put commas between them.. this is probably just as 'right'.



来源:https://stackoverflow.com/questions/4787498/tsql-aggregate-string-for-group-by

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!