tsql агрегатная строка для группы по - PullRequest
1 голос
/ 25 января 2011

У меня есть две таблицы:

Имена (идентификатор, имя) Адреса (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

1 Ответ

6 голосов
/ 25 января 2011

Вы можете использовать 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

Это хорошо работает, если у вас еще нет запятых в адресе, но даже если это и так, поскольку ваш запрос заключается в том, чтобы ставить запятые между ними ... это, вероятно, так же, как и "правильно".

...