Как да комбинирате множество редове в MSSQL

Възможни дубликати:
Симулиране на функция group_concat MySQL в 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