Как объединить несколько строк в MSSQL

Возможные дубликаты:
Моделирование функции MySQL group_concat в MS SQL Server 2005?
Группы Concat в SQL Сервер

Я пытаюсь написать SQL-запрос, который объединит строки вместе. Мне нужно сгруппировать неопределенное количество строк по ID #, но объединить их адреса, скажем, в одну ячейку.

Скажем, у нас есть

ID, Address
p1 a1
p1 a2
p1 a3
p2 a4
p2 a5

я хочу получить

ID, Address
p1 a1,a2,a3
p2 a4,a5

Количество адресов на ID может быть разным. Некоторые идентификаторы имеют 1, другие - 50.

Любая помощь будет оценена. Заранее спасибо!


person Boumbles    schedule 11.05.2011    source источник


Ответы (1)


Для получения такого результата можно использовать функцию Coalesce. Coalesce возвращает первое ненулевое значение в наборе. Если вы используете его следующим образом, он будет рекурсивно возвращать каждое значение по порядку, пока оно не обнулится, и возвращать его как строку, разделенную запятыми. Вы можете использовать любой другой разделитель, если хотите.

DECLARE @pAddr VarChar(MAX)
SELECT @pAddr = COALESCE(@pAddr + ', ', '') + [Address]
FROM AddressTable
WHERE AddressTable.Key = @pKey

Вы можете поместить этот код в UDF, а затем в представлении просто вызвать эту UDF, передав ключ.

person RThomas    schedule 11.05.2011