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

Moze li u jednom koraku ?

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

[ Pregleda: 416 | Odgovora: 6 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

virtual zubo
Zoran Jovic
Beograd

Član broj: 20202
Poruke: 57
195.178.35.*



Profil

icon Moze li u jednom koraku ?27.08.2008. u 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
27.08.2008. u 11:42 

jablan
Mladen Jablanović
Beograd

Član broj: 8286
Poruke: 3120
*.adsl-a-1.sezampro.yu.

Sajt: blog.radioni.ca


Profil

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

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

SuperModerator
Član broj: 17944
Poruke: 1935
*.eunet.yu.



Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 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.
▪ "Why isn't my wireless mouse connected to the computer?" - 2008 Dumbest Technical Support Question award
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
27.08.2008. u 12:25 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

SuperModerator
Član broj: 17944
Poruke: 1935
*.eunet.yu.



Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 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.

▪ "Why isn't my wireless mouse connected to the computer?" - 2008 Dumbest Technical Support Question award
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
27.08.2008. u 12:45 

virtual zubo
Zoran Jovic
Beograd

Član broj: 20202
Poruke: 57
195.178.35.*



Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 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
27.08.2008. u 13:13 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

SuperModerator
Član broj: 17944
Poruke: 1935
*.eunet.yu.



Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 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.
▪ "Why isn't my wireless mouse connected to the computer?" - 2008 Dumbest Technical Support Question award
▪ The word 'politics' is derived from the word 'poly', meaning 'many', and the word 'ticks', meaning 'blood sucking parasites' - Larry Hardiman
▪ If the good guy gets the girl, it's rated PG; if the bad guy gets the girl, it's rated R; and if everybody gets the girl, it's rated X
27.08.2008. u 15:07 

miq357
Beograd

Član broj: 56733
Poruke: 64
93.86.103.*

ICQ: 295440586


Profil

icon Re: Moze li u jednom koraku ?27.08.2008. u 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
27.08.2008. u 20:58 

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

[ Pregleda: 416 | Odgovora: 6 ]

Postavi temu Odgovori

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