[ adopilot @ 03.12.2007. 15:43 ] @
Poštovani !

Postoji li neki jednostavan način da više rekorda strpam u jedan rekord kod select galerije,

ako je rezultat galerije select * from #temp

kolona_a
a
b
c
d

ja bih želo napisati upit koji ce reci


select kolona_ado from #temp

a rezultat da dobijem

kolona_ado
a,b,c,d,




Lijep pozdrav
Admir

[ Koce @ 04.12.2007. 12:00 ] @
ako nemas previse podataka mozes ovako:

Declare @Sentence as varchar(8000)
SET @Sentence = ''
SELECT @Sentence = @Sentence + ''''+ kolona + '''' + ', '
FROM Tabela
print @Sentence

inace moras kroz cursor
[ CallMeSaMaster @ 05.12.2007. 13:23 ] @
To nije rjesenje, jerk kako i sam kaze "ako imas malo podataka"(8000)...
[ Zidar @ 05.12.2007. 13:44 ] @
Na ovaj nacin nemas ogranicenja:

Code:

CREATE TABLE #Temp(Kolona_ado varchar(5))
INSERT INTO #Temp VALUES ('a')
INSERT INTO #Temp VALUES ('b')
INSERT INTO #Temp VALUES ('c')
INSERT INTO #Temp VALUES ('d')
INSERT INTO #Temp VALUES ('e')

SELECT 
     Kolona_ado + ',' AS [data()] 
FROM #Temp
FOR XML PATH('')

XML_F52E2B61-18A1-11d1-B105-00805F49916B
-------------------------------------------
a, b, c, d, e,

(5 row(s) affected)


Kakv kursor, kakvi bakrači
Samo, ima jedan mali problem - kome treba ima kolone "XML_F52E2B61-18A1-11d1-B105-00805F49916B" ?

Ima i za to resenje:

Code:

SELECT 
(
SELECT 
     Kolona_ado + ',' AS [data()] 
FROM #Temp
FOR XML PATH('')
) AS Rezultat

Rezultat
-------------------
a, b, c, d, e,

(1 row(s) affected)


[ adopilot @ 06.12.2007. 13:10 ] @
Hvala na odgovima
Obadva upita rade stim što ja koristim onaj koji je objavio Zidar
jer se samo jednom koristi SELECT pa me apikacija ne zafrkava.

Inače ovaj upit koristim kao podupit u transakcijama zaključivanja robnih dokumenata,
Upit mi kontroliše da li će poslije zaključenja dokumenta artikli otići u minus na lageru te mi javlja koji su to arikli otišli u minus na lagerui.
Ukoliko je rezultat upita null onda će transakcija dokumenta biti potvrđena.

Kako se ranije nisam sretao sa komandama

[data()] i FOR XML PATH('')

Vas pitam koliko je ovo zahtjevno za server, to jeste da li troši neke ogromne preformanse ako se u upitu pojavljuje u najgoru ruku do 100 rekorda
koje ce smjestiti u jedan

i drugo pitanje koliko je panetno držati transakciju ne porvrđenu dok se ovaj upit ne odradi.

Sada se bojim da ne izazovem DEDLOCKOVE na serveru ukoliko je transakcija upisa otvorena dok se ne izvrši upit koji cu navesti




Lijep pozdrav
Unaprijed zahvalan

Code:

select 
case 
when 
(select
            
                count(*)
            from
                (select art_id, sum(kol) as kol
                    from sdo
                    where doc_id = :id and '#skl_fin_tip#' <>'F'
                    group by art_id) as p
                left outer join lager l on (p.art_id = l.art_id and l.skl_id = :skl_id)
                left outer join art a on l.art_id = a.id
            where
                (Round(l.kolicina,4)+Round(p.kol,4)) < 0)=0 then Convert(Bit,1)
else 
Convert(Bit,0)
end as Valid
,'Skladište '+(select naziv from skladiste where id = (:skl_id)) + '. Tražena količina prelazi u minus na lageru za artikal: '+
(
select
            
                RTRIM ((a.sifra+' '+a.naziv))+ ';  ' as [data()]
            from
                (select art_id, sum(kol) as kol
                    from sdo
                    where doc_id = :id and '#skl_fin_tip#' <>'F'
                    group by art_id) as p
                left outer join lager l on (p.art_id = l.art_id and l.skl_id = :skl_id)
                left outer join art a on l.art_id = a.id
            where
                (Round(l.kolicina,4)+Round(p.kol,4)) < 0
            
for XML path ('')
) as Msg
[ Zidar @ 06.12.2007. 16:02 ] @
@adopilot: Nemas problema za brzinu. Upravo sam spojio zaresom 70,000 rekorda za manje od 1/10 sekunde.

Inace, kod koji je ostavio Koce je sasvim OK. To je bio moj omiljeni metod dok nisam saznao za FOR XML PATH("")

Eto, i XML je ispao dobar za nesto