【发布时间】:2020-03-26 21:32:55
【问题描述】:
您好,我有以下表格与当前月份'Month':
+---------------+
| current_Month |
+---------------+
| 12 |
+---------------+
我还有另一张桌子和工人'Workers'
+--------+--------------------------+
| Name | Month_joined_the_company |
+--------+--------------------------+
| Peter | 12 |
| Paul | 9 |
| Sarah | 5 |
| Donald | 12 |
+--------+--------------------------+
我现在想要,根据我的月表,显示直到上个月加入公司的所有工人
当前月份是 10 我想要这个输出
+--------+--------------------------+
| Name | Month_joined_the_company |
+--------+--------------------------+
| Paul | 9 |
| Sarah | 5 |
+--------+--------------------------+
但是在年底,我想包括所有工人,即使哪个月与当月相同
+--------+--------------------------+
| Name | Month_joined_the_company |
+--------+--------------------------+
| Peter | 12 |
| Paul | 9 |
| Sarah | 5 |
| Donald | 12 |
+--------+--------------------------+
我现在有这个声明,但它不起作用......
SELECT *
FROM workers
WHERE
CASE
WHEN (SELECT TOP (1) Current_Month FROM Month) = 12
THEN (Month_joined_the_company <= (SELECT TOP (1) Current_Month FROM Month))
ELSE (Month_joined_the_company < (SELECT TOP (1) Current_Month FROM Month))
END
但这不起作用,我得到一个错误。有人可以帮助我,我如何在 WHERE 子句中使用 CASE
【问题讨论】:
-
称为case 表达式,表示它只能返回一个原子值,不能用于这种方式的程序流
-
跳过
case表达式。通常最好在WHERE子句中使用AND/OR结构。 -
@jarlh 如何使用 AND/OR 来实现我的目标?
-
@HoneyBadger 在某些数据库系统(例如 Postgres)中,表达式完全有可能计算为布尔值,然后将该值用作条件。将
WHERE子句描述为“程序流”也不是很正确,即使在缺少布尔类型因此有特殊条件规则的系统中也是如此。
标签: sql sql-server tsql case-when