首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据列值更改where条件

根据列值更改where条件
EN

Stack Overflow用户
提问于 2016-02-18 17:24:06
回答 4查看 1.1K关注 0票数 1

我面临着以下要求。以下查询由过程调用。值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;

提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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。

票数 1
EN

Stack Overflow用户

发布于 2016-02-18 17:29:14

您可以简单地添加一个类似如下的条件:

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

这可以用不同的方式重写,这一点是不言而喻的。

票数 5
EN

Stack Overflow用户

发布于 2016-02-18 17:30:49

很简单。添加以下条件:

AND (sp_sbsp.SUBSPCLTY_CODE != 'C430‘OR p_pac_code value != '008')

(别忘了括号)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35477403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档