如何在SQL查询的where子句中添加额外条件?

时间:2016-02-18 09:24:06

标签: sql oracle

我遇到了以下要求。以下是过程调用查询。值p_pac_code是过程的输入参数。

要求是,如果sp_sbsp.SUBSPCLTY_CODE!='C430值为''则查询应具有附加条件p_pac_code

对于任何其他p_pac_code值,它应该如下所示运行。有没有办法在WHERE子句中添加一个附加条件?

至于现在,我已经使用IF执行此操作..... ELSE根据p_pac_code值分别使用查询两次。但我需要找到一种方法来为这个单一查询添加一个条件。

     SELECT ptg.group_cid
     FROM PRVDR_TYPE_X_SPCLTY_SUBSPCLTY ptxss,
      PT_X_SP_SSP_STATUS pxsst ,
      pt_sp_ssp_x_group ptg,
      group_x_group_store gg,
      specialty_subspecialty sp_sbsp,
      treatment_type tt,
      provider_type pt
    WHERE 
    pt.PRVDR_TYPE_CODE          = ptxss.PRVDR_TYPE_CODE
    AND tt.TRTMNT_TYPE_CODE           = pxsst.TRTMNT_TYPE_CODE
    AND ptxss.PRVDR_TYPE_X_SPCLTY_SID = pxsst.PRVDR_TYPE_X_SPCLTY_SID
    AND tt.TRTMNT_TYPE_CODE           = p_pac_code
    AND TRUNC(SYSDATE) BETWEEN TRUNC(PXSST.FROM_DATE) AND TRUNC(PXSST.TO_DATE)
    AND ptg.prvdr_type_code        =ptxss.prvdr_type_code
    AND ptg.spclty_subspclty_sid   = ptxss.spclty_subspclty_sid
    AND ptxss.spclty_subspclty_sid = sp_sbsp.spclty_subspclty_sid
    AND ptg.spclty_subspclty_sid   = sp_sbsp.spclty_subspclty_sid
    AND ptg.status_cid             = 2
    AND ptg.group_cid              = gg.group_cid
    AND gg.group_store_cid         = 16
    AND gg.status_cid              = 2;

提前致谢。

4 个答案:

答案 0 :(得分:5)

您可以简单地添加如下条件:

... and ( 
         ( sp_sbsp.SUBSPCLTY_CODE!='C430' and p_pac_code = '008')
         OR 
         NVL(p_pac_code, '-') != '008'
        )

这可以用不同的方式重写,这个是非常不言自明的

答案 1 :(得分:0)

非常简单。添加以下条件:

AND(sp_sbsp.SUBSPCLTY_CODE!='C430'或p_pac_code值!='008')

(不要忘记括号)

答案 2 :(得分:0)

只是分享

SELECT ptg.group_cid
FROM PRVDR_TYPE_X_SPCLTY_SUBSPCLTY ptxss
WHERE 
pt.PRVDR_TYPE_CODE = ptxss.PRVDR_TYPE_CODE 
&&((tt.TRTMNT_TYPE_CODE = pxsst.TRTMNT_TYPE_CODE) 
or (tt.TRTMNT_TYPE_CODE = pxsst.TRTMNT_TYPE_CODE))

只需使用括号指定条件必须实现的位置。

答案 3 :(得分:0)

只需添加:

AND NOT (    NVL( sp_sbsp.SUBSPCLTY_CODE, 'x' ) = 'C430'
         AND NVL( p_pac_code value,       'x' ) = '008' )

到where子句。

使用NVL函数,以便它匹配NULL值(如果它们存在于您的数据中);否则,即使NULLC430不匹配,您仍会发现NULL = 'C430'NULL <> 'C430'以及NOT( NULL = 'C430' )都会返回false。