Połącz wiersze w jeden

Zadanie bojowe: w T-SQLu połączyć wynik kilku wierszy w jeden. Najprościej odpowiada na ten temat np. ASP FAQ, a rozszerza go przywoływany tam post z grupy dyskusyjnej microsoft.public.sqlserver.programming.

Krótko:
– tworzysz długą zmienną (n)varchar
– robisz SELECT z tą zmienną

Przykład dla tabeli użytkowników z polami ‚imie’ i ‚nazwisko’ – zwraca wszystkie osoby z funkcją administrator oddzielone przecinkiem:

DECLARE @sUsers nvarchar (4000)

SELECT @sUsers = ISNULL(@sUsers + u.imie + ' ' + u.nazwisko + ', ', '')
FROM users u
WHERE u.funkcja = 'administrator'

SELECT Osoby = @sUsers

PRINT @sUsers

Rozwiązanie działa dobrze dla niewielkich zbiorów danych. Dla większych ilości poleca się (patrz trzeci odnośnik) stosowanie klauzuli FOR XML PATH (dostępne od wersji SQL Server 2005)

Rozwiązań jest więcej:
Concatenating row values in Transact-SQL
Rowset string concatenation: Which method is best?
Row-Concatenation Solutions Aren’t All Equal

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Zdjęcie na Facebooku

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Zdjęcie na Google+

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s