[ virtual zubo @ 27.08.2008. 11:42 ] @
imam tabelu sa dve kolone prva(int),druga(string) 1 a 1 b 1 c 2 d 2 e 3 f treba da u jednom koraku dobijem 1 abc 2 de 3 f a da ne idem kroz kursor. Pokusavao sam, al bezuspesno. Ima li neko resenje ? poz |
[ virtual zubo @ 27.08.2008. 11:42 ] @
[ jablan @ 27.08.2008. 12:06 ] @
Izgleda da nije jednostavno:
http://dotnet-enthusiast.blogs...aggregate-function-in-sql.html BTW, MySQL-u postoji agregatna funkcija za konkatenaciju stringova GROUP_CONCAT. [ mmix @ 27.08.2008. 12:25 ] @
Ako koristis SQL 2005 ili 2008 postoji trik sa FOR XMLom
![]() Code: SELECT DISTINCT a.prva, (SELECT '' + b.druga FROM Tabela AS b WHERE a.prva = b.prva FOR XML PATH('')) AS SumaStringova FROM Tabela AS a Ako je SQL 2000, postoji fora sa UDF funkcijom koja radi agregaciju po jednom kljucu, pa se onda selektuje kljuc i UDF, imam to negde na mom SQL-u od videcu da ti iskopam. [ mmix @ 27.08.2008. 12:45 ] @
Ok, iskopao sam i ovu verziju za SQL2000 i promenio kolone i ime tabele za tvoj primer, znaci kreiras specfijalnu UDF koja vazi za tu tabelu:
Code: create function spoji(@kljuc int) returns varchar(8000) as begin declare @s varchar(8000); set @s = ''; select @s = @s + ISNULL(druga, '') from Tabela where prva = @kljuc; return @s; end onda rezultat dobijas sa Code: select distinct prva, dbo.spoji(prva) from Tabela PS: Mada po strukturi ovog UDFa mislim da nije mnogo brzi nego verzija za kurzorom, ako mozes koristi FOR XML varijantu. [ virtual zubo @ 27.08.2008. 13:13 ] @
svaka cast ovo mi je zavrsili posao:
SELECT DISTINCT a.prva, (SELECT '' + b.druga FROM Tabela AS b WHERE a.prva = b.prva FOR XML PATH('')) AS SumaStringova FROM Tabela AS a hvala puno [ mmix @ 27.08.2008. 15:07 ] @
Odlicno. Imaj samo jednu stvar u vidu, ovo je unsupported feature koji se bazira na nedokumentovanom ponasanju FOR XML izlaza, radi na SQL 2005 i 2008, ali nema garancija da ce raditi i u narednim verzijama, cak nema garancija i da sledeci service pack nece to promeniti.
[ miq357 @ 27.08.2008. 20:58 ] @
Evo da priložim još jedno moguće rešenje - moj omiljeni način za prikaz hijerarhijske liste (dokumentovana rekurzivna CTE, provereno radi na sql2005)
Code: WITH X (prva, CNT, LISTA, druga, LEN) AS ( SELECT prva, COUNT(*) OVER (PARTITION BY prva), CAST(druga AS VARCHAR(100)), druga, 1 FROM t1 UNION ALL SELECT X.prva, X.CNT, CAST(X.LISTA + E.druga AS VARCHAR (100)), E.druga, X.LEN+1 FROM t1 E, X WHERE E.prva = X.prva AND E.druga > X.druga ) SELECT TOP 100 PERCENT prva AS prva, LISTA FROM X WHERE LEN = CNT ORDER BY 1 Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|