Prikazi cijelu temu 17.12.2012 20:13
zidar Van mreze
Moderator
Registrovan od:03.02.2009
Lokacija:-


Predmet:Re: Pomoć oko upita
skolicina ti je ono sto racunas sa Sum(d.kolicina_promener) OVER (PARTITION BY d.id_dokumenta), pa bi trebalo staviti u WHERE nesto ovako:

Sum(d.kolicina_promener) OVER (PARTITION BY d.id_dokumenta) >0 OR Sum(d.kolicina_promener) OVER (PARTITION BY d.id_dokumenta) IS NOT NULL

Medjutim, window funkcije (none sa OVER()) ne mogu da se stave u WHERE, sintaksa za T-SQL to ne dozvoljabva. Za ono sto tebi treba potrebna su dva koraka
- prvo izracunas skolicina (sto si i uradio)
- u sledecem koraku izvuces rekorde koji ti trebaju

Ovako nekako:

Citat:
WITH Proracun As
(
SELECT
    m.id_dokumenta
    , m.id_vd
    , Sum(d.kolicina_promener) OVER (PARTITION BY d.id_dokumenta) AS skolicina
    , m.poslovni_partner#_kd
    , m.poslovni_partner#_pk
    , m.organizaciona_jedinica#_real
    , m.poslovni_partner#_ot
    , m.godina
    , m.datum_isporuke
    , m.id_relacije
    , p.id_dokumenta
    , p.id_fin_dokumenta
FROM uz_DokuMent m
LEFT OUTER JOIN Prod_fakturIsAn_DokuMent p ON m.id_dokumenta = p.id_dokumenta)
LEFT OUTER JOIN uz_DokuMent_stavka d ON d.id_dokumenta = m.id_dokumenta
WHERE m.godina = '2012'
                        AND m.id_vd IN ( 19, 354 )
                        AND m.organizaciona_jedinica#_real = '501'
                        AND p.id_fin_dokumenta IS NULL
                        AND m.poslovni_partner#_kd <> '14690'
                        AND m.broj_poslednje_stavke IS NOT NULL
                        AND m.datum_isporuke BETWEEN To_date(:p_datum_od, 'dd.mm.rrrr') AND To_date(:p_datum_do, 'dd.mm.rrrr')
--ORDER BY m.datum_isporuke ASC
)
SELECT
*
FROM Proracun
WHERE skolicina IS NOT NULL OR skolicina > 0
ORDER BY m.datum_isporuke ASC
;