使用带有三个值的参数可以在查询中获得不同的结果

时间:2017-10-06 13:22:55

标签: sql oracle plsql

我选择了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

的参数

1 个答案:

答案 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。