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
;