[ 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
[ 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 , ako u SELECTu stavis neku operaciju umesto cistog polja FOR XML ce tretirati izlaz tog polja ka literal umesto kao node XML-a efektivno spajajuci stringove, ako se jos to uokviri u prazan Tag, dobija se SUM(string), onda se to lepo ubaci kao nested select i voila:

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