提前道歉,因为我觉得我可能忘记/遗漏了一些明显的东西。开始;我在WHERE子句中使用了case语句,下面的工作正常:
WHERE r.[SomeCol] = @SomeColVal
AND SomeOtherCol =
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN
@SomeVal
WHEN...
...
ELSE
@SomeVal
END
我的“问题”是我想在我的ELSE块中添加一个额外的OR子句。这样的事情:
WHERE r.[SomeCol] = @SomeColVal
AND SomeOtherCol =
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN
@SomeVal
WHEN...
...
ELSE
@SomeVal OR @SomeVal - 1
END
当然,这会引发此错误: 关键字“OR”附近的语法不正确。在ELSE声明中
因此我的问题是......我可以使用什么样的正确/替代逻辑来实现这个目标? 提前谢谢
答案 0 :(得分:1)
CASE
是一个返回一个值的表达式。您可以在两个之间执行OR,而不是针对单个CASE
表达式进行测试,唯一的区别是else子句。 (使用IN
作为撰写SomeOtherCol = ... OR SomeOtherCol =
的快捷方式)您可以这样做:
WHERE r.[SomeCol] = @SomeColVal
AND SomeOtherCol in
(CASE WHEN (@Year = 0 AND @Period = 0) THEN
@SomeVal
CASE WHEN...
...
CASE ELSE
@SomeVal END,
CASE WHEN (@Year = 0 AND @Period = 0) THEN
@SomeVal
CASE WHEN...
...
CASE ELSE
@SomeVal - 1 END)
我的猜测是,这比你需要的逻辑更多,如果知道你的情况的具体情况,可以写一个更简单,更清晰的其他陈述。