WHERE 子句中的 CASE 语句 | SQL
CASE-Statement in WHERE-Clause | SQL
您好,我关注了 Table 当前月份 'Month'
:
+---------------+
| current_Month |
+---------------+
| 12 |
+---------------+
我还有另一个 Table 和工人 'Workers'
+--------+--------------------------+
| Name | Month_joined_the_company |
+--------+--------------------------+
| Peter | 12 |
| Paul | 9 |
| Sarah | 5 |
| Donald | 12 |
+--------+--------------------------+
我现在想要,根据我的月份 table,显示上个月加入公司的所有工人
当前月份是 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
这是你想要的吗?
select w.*
from workers w
inner join month m
on m.current_month = 12
or w.month_joined_the_company < m.current_month
这句话是:if current_month = 12
then return all workers, else just return 那些 month_joined_the_company
严格小于 current_month
的人。
注意:您可能应该考虑使用日期数据类型来存储这些值,否则新的一年开始时会发生什么?
您好,我关注了 Table 当前月份 'Month'
:
+---------------+
| current_Month |
+---------------+
| 12 |
+---------------+
我还有另一个 Table 和工人 'Workers'
+--------+--------------------------+
| Name | Month_joined_the_company |
+--------+--------------------------+
| Peter | 12 |
| Paul | 9 |
| Sarah | 5 |
| Donald | 12 |
+--------+--------------------------+
我现在想要,根据我的月份 table,显示上个月加入公司的所有工人
当前月份是 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
这是你想要的吗?
select w.*
from workers w
inner join month m
on m.current_month = 12
or w.month_joined_the_company < m.current_month
这句话是:if current_month = 12
then return all workers, else just return 那些 month_joined_the_company
严格小于 current_month
的人。
注意:您可能应该考虑使用日期数据类型来存储这些值,否则新的一年开始时会发生什么?