首页 > 解决方案 > 使用 CASE WHEN 分配桶

问题描述

对编码相当陌生。我创建了一个新列,使用 DateDiff 输出任务过期的天数。然后,我想获取 DateDiff 的结果并使用 CASE WHEN 为其分配一个表达式(逾期 60 天,逾期 30-45 天等)。但是,这个错误出来了,特别是说“关键字'CASE”附近有一个“不正确的语法”

SELECT t.name, t.Task,DateDiff(day, t.DueDate, GetDate()) As DaysOverdue
CASE WHEN DaysOverdue >= 60 THEN '>60 days Overdue'
     WHEN DaysOverdue <=45 And >=30 THEN '30-45 days Overdue'
     ELSE 'Current' END as bucket
FROM t

我希望它创建一个名为“bucket”的新列,显示 CASE WHEN 表达式的结果

name   task      Daysoverdue         bucket

  x       y            43            30-45 days overdue
  a       b            64            >60 days overdue

标签: sqltsql

解决方案


在 DaysOverdue 之后您错过了一个逗号 (,)

在这种情况下也不要使用 DaysOverdue 别名,使用DateDiff(day, t.DueDate, GetDate())

您不能以这种方式使用 > 和 <WHEN DaysOverdue <=45 And >=30而是使用

WHEN DateDiff(day, t.DueDate, GetDate()) between 30 And 45

最终应该是这样的

SELECT t.name, t.Task,DateDiff(day, t.DueDate, GetDate()) As DaysOverdue,
CASE WHEN DateDiff(day, t.DueDate, GetDate())>= 60 THEN '>60 days Overdue'
     WHEN DateDiff(day, t.DueDate, GetDate()) between 30 And 45 THEN '30-45 days Overdue'
     ELSE 'Current' END as bucket
FROM t

推荐阅读