【问题标题】:Nested case statement - what's is wrong with it?嵌套案例语句 - 它有什么问题?
【发布时间】:2022-01-24 20:49:10
【问题描述】:

我想在 Microsoft SQL Server 中编写我想要的嵌套 case 语句

case 
    when date 2 is null 
        then date 1 
        else date 2 
end ---1st condition

并将此条件用作:

case 
    when condition1 is <= getdate() 
         and condition1 < getdate() + 14 
        then 'DUE' 
        else 'after .

我收到错误消息,无法完成我的案例陈述。

【问题讨论】:

  • 您的“第一个条件”可以表示为 ISNULL(Date2, Date1) - 然后在您的 CASE 中使用它
  • " 收到错误消息" 那是什么错误?这也是CASE 表达式,而不是Case 语句。
  • and condition1 &lt; getdate() + 14 无关紧要,因为如果第一行为真,则它始终为真

标签: sql sql-server


【解决方案1】:

您不需要第一次检查,因为这两项检查都在比较 getdate

case when isnull([date 1],[date 2]) <= getdate() + 14 then 'DUE' else <'' end

【讨论】:

    【解决方案2】:

    我会为此使用 CROSS APPLY :

    SELECT t2.y
    FROM sometable
    CROSS APPLY (SELECT CASE WHEN date 2 IS NULL THEN date 1 ELSE date 2 END) t1(x)
    CROSS APPLY (SELECT CASE WHEN t1.x <= getdate() AND t1.x < getdate() + 14 THEN 'DUE' ELSE 'AFTER' END) t2(y)
    

    请注意,您可以使用 COALESCE 使第一个 CROSS APPLY 表达式更简单,并使用 IIF 来简化第二个:

    SELECT t2.y
    FROM sometable
    CROSS APPLY (SELECT COALESCE(date 2, date 1)) t1(x)
    CROSS APPLY (SELECT IIF(t1.x <= getdate() AND t1.x < getdate() + 14, 'DUE', 'AFTER')) t2(y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      • 1970-01-01
      • 2020-12-13
      • 2014-04-14
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      相关资源
      最近更新 更多