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

upotreba SUM. Gdje grijesim

[es] :: MS SQL :: upotreba SUM. Gdje grijesim

[ Pregleda: 1939 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

marko v
programer
Šibenik

Član broj: 46810
Poruke: 109
*.adsl.net.t-com.hr.

Sajt: www.bono-husky.tk


Profil

icon upotreba SUM. Gdje grijesim28.10.2007. u 14:45 - pre 200 meseci
Vec se satima mucim sa odredjenim problemom.Dakle:
tabele su slijedeće
narudzbeGodisnje
( sifGodNarudzbe,
kupac ,
godina)

tjedneNarudzbe
( sifTjedneNarudzbe,
sifTjedan,
rokIsporuke,
sifGodNarudzbe)

stavkeTjedneNarudzbe
( brStavke,
tjednaNarudzba,
sifProizvod,
komada)

isporuke
(
rbrIsporuke,
datumIsporuke,
sifTjedneNarudzbe)

stavkeIsporuke
( brStavkeIsporuke,
rbrIsporuke,
sifProizvod,
komada)
Isporuke su vezane uz tjedne narudzbe. Za svaku tjednu narudzbu moze biti vise isporuka

Upitom zelim dobiti za svaku godinu koliko je komada odredjenog proizvoda naručeno, koliko je isporučeno, i izračunati koliko je preostalo za isporučiti.

To pokušavam slijedećim upitom:

select
narudzbeGodisnje.godina,narudzbeGodisnje.kupac,
stavkeTjedneNarudzbe.sifProizvod as ProizvodNaruceni,
sum(stavkeTjedneNarudzbe.komada) as Narucenih,
sum(stavkeIsporuke.komada) as Isporuceno,
(sum(stavkeTjedneNarudzbe.komada)-sum(stavkeIsporuke.komada)) as Preostalo

from
narudzbeGodisnje,
tjedneNarudzbe,
stavkeTjedneNarudzbe,
isporuke,
stavkeIsporuke

where
stavkeTjedneNarudzbe.sifProizvod= stavkeIsporuke.sifProizvod and
tjedneNarudzbe.sifGodNarudzbe = narudzbeGodisnje.sifGodNarudzbe and
stavkeTjedneNarudzbe.tjednaNarudzba = tjedneNarudzbe.sifTjedneNarudzbe and
isporuke.sifTjedneNarudzbe = tjedneNarudzbe.sifTjedneNarudzbe and
stavkeIsporuke.rbrIsporuke = isporuke.rbrIsporuke

group by
stavkeTjedneNarudzbe.sifProizvod,
narudzbeGodisnje.godina,
narudzbeGodisnje.kupac

koji mi vraća rezultat:

Code:

godina kupac                                              ProizvodNaruceni     Narucenih   Isporuceno  Preostalo
------ -------------------------------------------------- -------------------- ----------- ----------- -----------
2007   1                                                  22                   2000        800         1200
2007   1                                                  34                   2000        400         1600
2008   1                                                  22                   1000        300         700
2008   1                                                  34                   1200        340         860


koji je pogrešan u tome što upit stvarni broj naručenih komada nekog proizvoda pomnozi sa brojem isporuka u kojima je proizvod bio zastupljen u toj godini.
Gdje grijesim i kako da to izbjegnem.
 
Odgovor na temu

marko v
programer
Šibenik

Član broj: 46810
Poruke: 109
*.adsl.net.t-com.hr.

Sajt: www.bono-husky.tk


Profil

icon Re: upotreba SUM. Gdje grijesim28.10.2007. u 18:49 - pre 200 meseci
Problem sam rijesio. Evo kako:
Code:

select 
GodinaNarudzbe, NaruceniProizvod,KomadaNaruceno,KomadaIsporuceno,
(KomadaNaruceno - KomadaIsporuceno) as Preostalo

from 
    (Select  godina as GodinaNarudzbe,stavkeTjedneNarudzbe.sifProizvod as NaruceniProizvod,
        sum(stavkeTjedneNarudzbe.komada) as KomadaNaruceno
    from
        narudzbeGodisnje,
        tjedneNarudzbe,
        stavkeTjedneNarudzbe
    where
        tjedneNarudzbe.sifGodNarudzbe = narudzbeGodisnje.sifGodNarudzbe and
        stavkeTjedneNarudzbe.tjednaNarudzba = tjedneNarudzbe.sifTjedneNarudzbe
    group by stavkeTjedneNarudzbe.sifProizvod,godina) as pojedineNarudzbe 
left join 
    (select  godina as GodinaIsporuke,stavkeIsporuke.sifProizvod as IsporuceniProizvod,
         sum(distinct stavkeIsporuke.komada) as KomadaIsporuceno
    from
        narudzbeGodisnje,
        tjedneNarudzbe,
        stavkeTjedneNarudzbe,
        isporuke,
        stavkeIsporuke
    where
        tjedneNarudzbe.sifGodNarudzbe = narudzbeGodisnje.sifGodNarudzbe and
        stavkeTjedneNarudzbe.tjednaNarudzba = tjedneNarudzbe.sifTjedneNarudzbe and
        isporuke.sifTjedneNarudzbe = tjedneNarudzbe.sifTjedneNarudzbe and
        stavkeIsporuke.rbrIsporuke = isporuke.rbrIsporuke
    group by stavkeIsporuke.sifProizvod,narudzbeGodisnje.godina
    )as pojedineIsporuke
on pojedineNarudzbe.GodinaNarudzbe = pojedineIsporuke.GodinaIsporuke
and pojedineNarudzbe.NaruceniProizvod  = pojedineIsporuke.IsporuceniProizvod


Da li je moglo i na jednostavniji nacin?
 
Odgovor na temu

[es] :: MS SQL :: upotreba SUM. Gdje grijesim

[ Pregleda: 1939 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

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