T-SQL CASE WHEN语句不兼容

时间:2015-10-28 17:49:19

标签: sql sql-server reporting-services case

所以我被困在这个我的声明中。每个单独的情况在where子句中运行良好,但是当我尝试将其包装在一个case语句时它会破坏我。在语句的情况下使用between语句是否存在问题?下面是代码。如果有任何想法请分享!

英语中的逻辑是ssrs表单上有一个复选框。所以box可以是1或0,根据值,我将执行where语句。

WHERE (CASE @box
WHEN 1 THEN (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL) 
ELSE 0 THEN (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL 
AND NOT  CheckReg.CheckDate IS NULL AND CheckReg.CheckDate IS NOT NULL)
END)

如果有人知道更好的解决方案,那么上面的逻辑请告诉我。我正在使用Microsoft sql sever

2 个答案:

答案 0 :(得分:3)

您需要使用(monthIndex = 1 and: [day = 1]) ifTrue: [ <etc> ]

OR

或者您可以合并WHERE (@box = 1 AND (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL)) OR (@box = 0 AND (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL AND NOT CheckReg.CheckDate IS NULL AND CheckReg.CheckDate IS NOT NULL)) 部分中的条件并与WHEN进行比较:

THEN

答案 1 :(得分:3)

您无法使用CASE - CASE用于条件分配,而不是用于条件逻辑。您需要将每个逻辑流分开:

WHERE 
(
    @box = 1 
    AND (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL) 
)
OR
(
    @box = 0
    AND (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL )
    AND NOT (CheckReg.CheckDate IS NULL AND CheckReg.CheckDate IS NOT NULL)
)