1

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

因此我的问题......我可以用来完成这个的正确/替代逻辑是什么?
先感谢您

4

1 回答 1

1

CASE是一个返回一个值的表达式。CASE您可以在两个表达式之间执行 OR,而不是针对单个表达式进行测试,唯一的区别是 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)

我的猜测是,这比您需要的逻辑更多,如果知道您的具体情况,则可以编写更简单、更清晰的 else 语句。

于 2009-08-10T22:51:51.260 回答