我选择了p_water,它有3个值0,1,2如果我选择1,2我将从表中得到的结果,其中字段水是1或2,但如果我选择0我想得到1的组合2.我将如何做? AND zs.water = nvl(:p_water,zs.water)这个不能帮我估算0值。
由于
SELECT rua.DATUM_DOKUMENTA DATUM_DOKUMENTA,
rua.VRSTA_promjene VRSTA_promjene,
COUNT (*) broj_racuna,
SUM (NVL (rua.duguje, 0)) UKUPNO_BLAGAJNA,
,zs.vodovod
FROM nve_racuni_uplate rua, nve_potrosaci ptr ,nve_zone_snabdjevanja zs,nve_vodomjerna_mjesta vm
WHERE rua.RADNA_GODINA = :P_GODINA
AND ((PTR.VODOMJERNO_MJESTO = VM.SIFRA AND VM.ZBIRNI='N' ) or (PTR.VODOMJERNO_MJESTO = VM.SIFRA_ZBIRNOG))
AND zs.vodovod = nvl(:p_vodovod,zs.vodovod)
AND ( (:p_vrsta IS NULL AND rua.vrsta_promjene IN ('1', '2'))
OR (:p_vrsta IS NOT NULL AND rua.vrsta_promjene = :p_vrsta))
GROUP BY rua.DATUM_DOKUMENTA, rua.VRSTA_promjene,zs.vodovod
ORDER BY rua.DATUM_DOKUMENTA, rua.VRSTA_promjene,zs.vodovod
p_vodovod
是带有值0,1 2
答案 0 :(得分:1)
但如果我选择0我想得到1和2的组合。我将如何做到
使用CASE
声明进行疏散。
使用此:
SELECT rua.DATUM_DOKUMENTA DATUM_DOKUMENTA,
rua.VRSTA_promjene VRSTA_promjene,
COUNT (*) broj_racuna,
SUM (NVL (rua.duguje, 0)) UKUPNO_BLAGAJNA,
zs.vodovod
FROM nve_racuni_uplate rua,
nve_potrosaci ptr,
nve_zone_snabdjevanja zs,
nve_vodomjerna_mjesta vm
WHERE rua.RADNA_GODINA = :P_GODINA
AND ( (PTR.VODOMJERNO_MJESTO = VM.SIFRA AND VM.ZBIRNI = 'N')
OR (PTR.VODOMJERNO_MJESTO = VM.SIFRA_ZBIRNOG))
AND zs.vodovod IN (CASE
WHEN (NVL ( :p_vodovod, zs.vodovod)) = 1
THEN 1
WHEN (NVL ( :p_vodovod, zs.vodovod)) = 2
THEN 2
ELSE
zs.vodovod
END)
AND ( ( :p_vrsta IS NULL AND rua.vrsta_promjene IN ('1', '2'))
OR ( :p_vrsta IS NOT NULL AND rua.vrsta_promjene = :p_vrsta))
GROUP BY rua.DATUM_DOKUMENTA, rua.VRSTA_promjene, zs.vodovod
ORDER BY rua.DATUM_DOKUMENTA, rua.VRSTA_promjene, zs.vodovod
另请注意,您不应使用旧的SQL连接技术。您必须使用ANSI sql join。