[ Samo polako @ 24.10.2005. 18:07 ] @
Zanima me slijedeće:

ako imam upit tipa:

select s,
(select sum (a) from n1 where sifra=sf.s) as A,
(select sum (a) from n2 where sifra=sf.s) as B,
(select sum (a) from n1 where sifra=sf.s) - (select sum (a) from n2 where sifra=sf.s) as AMB
from sf

da li postoji neki način da se to upita slično slijedećem:

select s,
(select sum (a) from n1 where sifra=sf.s) as A,
(select sum (a) from n2 where sifra=sf.s) as B,
A-B as AMB
from sf

Ovako kako je napisano naravno ne radi...

Koliko sam uspio pretražiti forum o ovom ranije nije bilo riječi...

Ajmo stručnjaci...
[ goranvuc @ 24.10.2005. 18:25 ] @
Code:

SELECT s, A, B, (ISNULL(A, 0) - ISNULL(B, 0)) AS AMB 
FROM sf 
LEFT JOIN (SELECT SUM(a) AS A, sifra FROM n1 GROUP BY sifra) AS UpitA ON sf.s = UpitA.sifra 
LEFT JOIN (SELECT SUM(a) AS B, sifra FROM n2 GROUP BY sifra) AS UpitB ON sf.s = UpitB.sifra


Napomena, ISNULL se koristi zato sto A ili B mogu biti NULL. Nadam se da si na ovo mislio.

Inace, ovako napisan upit ti se znatno brze izvrsava.

[Ovu poruku je menjao goranvuc dana 24.10.2005. u 19:26 GMT+1]
[ Samo polako @ 24.10.2005. 20:15 ] @
Hvala na odgovoru, sutra cu da probam pa javim da li sam se snašao...

MISLIO sam na ISNULL (to sam sinoć postavio), a ovaj upit je svakako uprošten od onog koji kod mene radi.
Mislim da bi LEFT JOIN trebao da radi skoro pa duplo brže.
Inače upit za koji mi to treba se odaziva za više od 40 sekundi onako kako je postavljen, što nije zanemarivo...

Pozdrav.

[Ovu poruku je menjao Samo polako dana 24.10.2005. u 21:20 GMT+1]
[ mkaras @ 24.10.2005. 21:58 ] @
Dana Mon, 24 Oct 2005 19:07:09 CEST, Samo polako napisa:


Citat:

select s,
(select sum (a) from n1 where sifra=sf.s) as A,
(select sum (a) from n2 where sifra=sf.s) as B,
A-B as AMB
from sf


Probaj sa procedurom


declare @a integer
declare @b integer
declare @ab integer

select @a = sum (a) from n1 where sifra=sf.s
select @b = sum (a) from n2 where sifra=sf.s
set @ab = @a - @b
select s,@a as A, @b as B, @ab as AB

Trebalo bi da veoma brzo odradi posao. Sa slicnom procedurom radim neka sumiranja iz osam tabela sa ukupno oko tri miliona zapisa i to na relativno prosecnoj masini ne radi duze od dve tri sekunde.

[Ovu poruku je menjao mkaras dana 24.10.2005. u 23:10 GMT+1]
[ goranvuc @ 25.10.2005. 18:39 ] @
I sta si zakljucio?
[ Samo polako @ 26.10.2005. 19:43 ] @
Zaključio sam da sam bolestan, ležim, pijem čajeve itd...

tako da ne zaključujem... dok ne ozdravim...