我面临着以下要求。以下查询由过程调用。值p_pac_code
是该过程的输入参数。
要求是如果p_pac_code
值是'008‘,查询应该有一个额外的条件sp_sbsp.SUBSPCLTY_CODE!='C430
。
对于任何其他p_pac_code
值,它应该如下所示运行。有没有办法通过在WHERE子句中添加额外的条件来做到这一点?
到目前为止,我已经根据p_pac_code
的值分别使用IF.....ELSE和查询两次完成了这项工作。但我需要找到一种方法,只需在这个查询中添加一个条件。
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;
提前谢谢。
发布于 2016-02-18 18:03:13
只需添加:
AND NOT ( NVL( sp_sbsp.SUBSPCLTY_CODE, 'x' ) = 'C430'
AND NVL( p_pac_code value, 'x' ) = '008' )
添加到where子句。
使用NVL
函数是为了使其匹配NULL
值(如果它们存在于您的数据中);否则,即使NULL
不匹配C430
,您仍然会发现NULL = 'C430'
、NULL <> 'C430'
和NOT( NULL = 'C430' )
都将返回false。
发布于 2016-02-18 17:29:14
您可以简单地添加一个类似如下的条件:
... and (
( sp_sbsp.SUBSPCLTY_CODE!='C430' and p_pac_code = '008')
OR
NVL(p_pac_code, '-') != '008'
)
这可以用不同的方式重写,这一点是不言而喻的。
发布于 2016-02-18 17:30:49
很简单。添加以下条件:
AND (sp_sbsp.SUBSPCLTY_CODE != 'C430‘OR p_pac_code value != '008')
(别忘了括号)
https://stackoverflow.com/questions/35477403
复制相似问题