【问题标题】:SQL Server : IF condition within where clauseSQL Server:where子句中的IF条件
【发布时间】:2017-06-16 00:25:39
【问题描述】:

我试图在 where 子句中放置一个 if 条件,但我无法找出我想要的正确语法。

逻辑应该是,如果某个时期等于特定数字,则检查以确保 pdftype 不为空,否则不要全部检查。

这是我目前所拥有的:

where  
    g.ReportInstanceID = blah
    and rcr.FormID = blah
    and rcr.FormSectionID = blah
    and rcr.SubSectionID = blah
    and CASE rcr.DataCollectionPeriodID 
           WHEN 163 THEN (PDFType IS NOT NULL)
        END

【问题讨论】:

  • 我会在OR 中使用多个条件,如下面的答案所示,但您可以在WHERE 中使用CASEAND CASE WHEN rcr.DataCollectionPeriodID = 163 THEN PDFType ELSE 'X' END IS NOT NULL
  • This answer 显示了如何在 ON 子句中使用 CASE 表达式。 WHERE 子句也是如此。

标签: sql-server tsql


【解决方案1】:

试试这个:

. . .
AND CASE when rcr.DataCollectionPeriodID = 163 THEN
     case when PDFType is not null then 1 else 0 end
    else 1 END = 1

【讨论】:

    【解决方案2】:

    CASE 语句不是这样工作的。我认为这可以满足您的要求:

    where  g.ReportInstanceID = blah
        and rcr.FormID = blah
        and rcr.FormSectionID = blah
        and rcr.SubSectionID = blah
        and (
              (rcr.DataCollectionPeriodID = 163 and PDFType IS NOT NULL)
              or rcr.DataCollectionPeriodID <> 163
            )
    

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多