所以我被困在这个我的声明中。每个单独的情况在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
答案 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)
)