使用CASE WHEN分配存储桶

时间:2019-05-14 22:17:37

标签: sql tsql

是编码的新手。我创建了一个新列,该列使用DateDiff输出任务过期的日期。然后,我想使用CASE WHEN来获取​​DateDiff的结果,并为其分配一个表达式(逾期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

1 个答案:

答案 0 :(得分:0)

在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