Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于列值更改where条件_Sql_Oracle - Fatal编程技术网

Sql 基于列值更改where条件

Sql 基于列值更改where条件,sql,oracle,Sql,Oracle,我面临以下要求。以下查询由过程调用。值p_pac_code是程序的输入参数 要求是查询应该有一个附加条件sp\sbsp.subsclty\u code!='C430如果p_pac_code值为“008” 对于任何其他p_pac_code值,应按如下方式运行。有没有办法在WHERE子句中添加一个附加条件 现在,我已经使用IF…..ELSE分别使用查询两次,具体取决于p\u pac\u code值。但我需要找到一种方法,只需在这个查询中添加一个条件 SELECT ptg.group_cid

我面临以下要求。以下查询由过程调用。值
p_pac_code
是程序的输入参数

要求是查询应该有一个附加条件
sp\sbsp.subsclty\u code!='C430
如果
p_pac_code
值为“008”

对于任何其他
p_pac_code
值,应按如下方式运行。有没有办法在WHERE子句中添加一个附加条件

现在,我已经使用IF…..ELSE分别使用查询两次,具体取决于
p\u pac\u 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;

提前感谢。

您只需添加如下条件:

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

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

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

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

这可以用不同的方式重新编写,这一条很容易解释。添加以下条件:

和(sp_sbsp.subsclty_代码!=“C430”或p_pac_代码值!=“008”)


(别忘了括号)

很简单。添加以下条件:

和(sp_sbsp.subsclty_代码!=“C430”或p_pac_代码值!=“008”)

(别忘了括号)

只是分享而已

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))
只需使用括号指定条件必须实现的位置。

仅共享

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))
只需使用括号指定条件必须实现的位置。

只需添加:

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。

只需添加:

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