tsql aggregate string for group by

I have two tables:

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

  • Can you search SQL Server 2005 Stored Procedure content?
  • Import csv file into SQL Server database in C# Windows application without header
  • Limit SQL/LDAP Query to 901 Rows
  • Whats the difference between UNION and CROSS JOIN?
  • How to Get Last Created Entry's ID From Sql Database With Asp.Net
  • add Prefix to XML tag in FOR XML AUTO mode
  • 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
    

    One Solution collect form web for “tsql aggregate string for group by”

    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’.

    MS SQL Server is a Microsoft SQL Database product, include sql server standard, sql server management studio, sql server express and so on.