2011-09-30 198 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

非常感謝你 –