带有/ OR的where子句中的case语句

时间:2009-08-10 22:12:15

标签: sql-server where-clause case-statement

提前道歉,因为我觉得我可能忘记/遗漏了一些明显的东西。开始;我在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声明中

因此我的问题是......我可以使用什么样的正确/替代逻辑来实现这个目标? 提前谢谢

1 个答案:

答案 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)

我的猜测是,这比你需要的逻辑更多,如果知道你的情况的具体情况,可以写一个更简单,更清晰的其他陈述。