sql - 使用 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
解决方案
在 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
推荐阅读
- python - 如何使用 python 更改 Mac 上的辅助显示器壁纸?
- kubernetes - Kubernetes Minikube-当我在 Windows 10 上创建带有外部开关的 minikube 时,主机网络连接失败
- apache-spark - 使用 pyspark 时,有人知道如何解决“java.lang.OutOfMemoryError:GC 开销限制超出”错误吗?
- angular - 为什么我的子 NgModule 看不到根 NgModule 中定义的自定义管道?
- c# - 由于 .net-core 中的 linq-statement 导致 IEnumerable 和 List 之间出现意外差异?
- java - 当我在 Java 中添加 char 和 String 时会发生什么?
- python-3.x - model.compile 的作用是什么?
- css - CSS:忽略嵌套类中的属性
- nutch - Nutch 1.6:CSVIndexWriter 失败
- hadoop - hadoop 无法删除:“-expunge:非法选项 -immediate”?