Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Moze li u jednom koraku ?

[es] :: MS SQL :: Moze li u jednom koraku ?

[ Pregleda: 2071 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

virtual zubo
Zoran Jovic
Beograd

Član broj: 20202
Poruke: 72
195.178.35.*



Profil

icon Moze li u jednom koraku ?27.08.2008. u 11:42 - pre 189 meseci
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
 
Odgovor na temu

jablan

Član broj: 8286
Poruke: 4541



+710 Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 12:06 - pre 189 meseci
Izgleda da nije jednostavno:

http://dotnet-enthusiast.blogs...aggregate-function-in-sql.html

BTW, MySQL-u postoji agregatna funkcija za konkatenaciju stringova GROUP_CONCAT.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 12:25 - pre 189 meseci
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.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 12:45 - pre 189 meseci
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.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

virtual zubo
Zoran Jovic
Beograd

Član broj: 20202
Poruke: 72
195.178.35.*



Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 13:13 - pre 189 meseci
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
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 15:07 - pre 189 meseci
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.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

miq357
ISP Teh support
Beograd

Član broj: 56733
Poruke: 72
93.86.103.*

ICQ: 295440586


Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 20:58 - pre 189 meseci
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
 
Odgovor na temu

[es] :: MS SQL :: Moze li u jednom koraku ?

[ Pregleda: 2071 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.