SQL Server - 在WHERE子句中使用CASE

Joe*_*Yan 2 sql sql-server sql-server-2008

我想使用CASEin WHERE子句,但它返回错误.

我可以在where子句中使用CASE吗?或者如何修复它?谢谢

SELECT * FROM hris_leave.dbo.tbl_act 
inner join hris_leave.dbo.tstaff on hris_leave.dbo.tstaff.s_id =        hris_leave.dbo.tbl_act.s_id 
where 
 case when acting_to is not null 
then 
datediff(day, acting_from, acting_to) >= 90 and acting_to >= '2010-10-01' 
else
acting_to is null
order by  hris_leave.dbo.tbl_act.s_id 
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 7

在您的情况下,您只需要OR

WHERE
    (
    acting_to is null 
    OR 
        (
        datediff(day, acting_from, acting_to) >= 90
        AND
        acting_to >= '2010-10-01'
        )
    )
Run Code Online (Sandbox Code Playgroud)

一个案例是价值观,而不是条件.条件超出了CASE表达式

例如

CASE
    WHEN SomeCol = 'a' THEN ColA
    WHEN SomeCol = 'c' THEN ColC
    ELSE ColB
END > 42
Run Code Online (Sandbox Code Playgroud)