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 的人。

注意:您可能应该考虑使用日期数据类型来存储这些值,否则新的一年开始时会发生什么?