2011-09-30 137 views
1

我想在WHERE子句中使用CASE,但它返回错误。SQL Server - 在WHERE子句中使用CASE

我可以在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 
+0

你不能做你正在尝试做的外面。什么是null acting_to日期代表您的数据?这是否意味着休假? – Sparky

+0

您可以在WHERE子句中使用CASE,但CASE没有任何意义,并且在语法上不正确。 – mwan

回答

7

在你的情况,你只需要OR

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

的情况是,没有条件。条件是CASE表达式

CASE 
    WHEN SomeCol = 'a' THEN ColA 
    WHEN SomeCol = 'c' THEN ColC 
    ELSE ColB 
END > 42 
+0

非常感谢你 –