【问题标题】:Is there a way to ignore the AND in a CASE when something is true?当某事为真时,有没有办法忽略 CASE 中的 AND?
【发布时间】:2016-11-14 15:10:06
【问题描述】:

我有这个Where 子句

Select * From Student_Info si
Inner Join Certifications cc
Inner Join Cert_Earned ce

Where si.grad_date = @grad_date
AND cc.org_no = @org_no

但我需要一个额外的 AND,如果结果为 false,则应该忽略它,我需要 ALL 证书

AND cc.industrial = CASE WHEN @industrial = 0 THEN Do Nothing
                     Else @industrial

【问题讨论】:

  • 不要在 where 子句中使用 case 表达式,而是使用 AND/OR。

标签: sql sql-server tsql case


【解决方案1】:

这通常表示为:

AND (@industrial = 0 OR ccc.industrial = @industrial)

【讨论】:

  • 我想我们在这里被绊倒了,我想要所有的值,如果 @industrial0
  • @christopherclark 这正是该子句的作用。如果它是0,它将评估为true。如果不是0,它会评估ccc.industrial是否等于该值,然后才会是true
  • 哦,哇,这是一个艰难的思考过程。谢谢,确实有效。
【解决方案2】:

听起来你只是想添加一个谓词,在两个不同的条件之间进行 OR

AND (@industrial = 0 or ccc.industrial = @industrial)

【讨论】:

    【解决方案3】:

    你可以用 CASE 函数做这样的事情:

    AND 1 = (CASE WHEN @industrial = 0 THEN 1 
                  ELSE CASE WHEN cc.industrial = @industrial THEN 1 END
             END)
    

    或者如果 cc.industrial 不可为空,那么可能:

    AND cc.industrial = CASE WHEN @industrial = 0 THEN cc.industrial
                         Else @industrial END
    

    【讨论】:

      猜你喜欢
      • 2022-06-22
      • 2011-04-30
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多