T-SQL语句不使用中间语句时的情况
所以我被困在我的where声明中。在where子句中,每个单独的案例都运行良好,但当我尝试将其封装在case where语句中时,它会打断我的话。在case when语句中使用between语句是否有问题?下面是代码。如果有任何想法,请分享 英语中的逻辑是ssrs表单上有一个复选框。所以box可以是1或0,根据值,我将执行where语句T-SQL语句不使用中间语句时的情况,sql,sql-server,reporting-services,case,Sql,Sql Server,Reporting Services,Case,所以我被困在我的where声明中。在where子句中,每个单独的案例都运行良好,但当我尝试将其封装在case where语句中时,它会打断我的话。在case when语句中使用between语句是否有问题?下面是代码。如果有任何想法,请分享 英语中的逻辑是ssrs表单上有一个复选框。所以box可以是1或0,根据值,我将执行where语句 WHERE (CASE @box WHEN 1 THEN (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkE
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 Server您需要使用
或
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))
或者,您可以在部分时组合中的条件,并与进行比较,然后
:
WHERE
(CASE
WHEN @box = 1 AND (CheckReg.CheckDate BETWEEN @ChkStartDate and @ChkEndDate OR CheckReg.CheckDate IS NULL)
THEN 1
WHEN @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)
THEN 1
ELSE 0
END
) = 1
您不能像这样使用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)
)
在之后
应该有一个表达式返回一些值,而不是另一个逻辑比较和not CheckReg.CheckDate为NULL和CheckReg.CheckDate不为NULL
应该做什么?AND not部分实际上是工作的,这是我制作异或的方式。获取所有空值或范围内的所有日期。此答案也是正确的,谢谢。我相信我只能核对一个答案,所以我选择了第一个答案。我真的很感谢你的帮助-彼得