Оператор Case в предложении where с ИЛИ - PullRequest
1 голос
/ 11 августа 2009

Заранее извиняюсь, так как я чувствую, что, возможно, я забыл / упустил что-то очевидное в этом. Вот оно; Я использую оператор case в своем предложении WHERE, ниже работает нормально:

WHERE r.[SomeCol] = @SomeColVal
AND SomeOtherCol =  
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN
@SomeVal
     WHEN...
...
     ELSE
@SomeVal
END 

Моя "проблема" заключается в том, что я хочу добавить дополнительное предложение OR в мой блок ELSE ... что-то вроде этого:

WHERE r.[SomeCol] = @SomeColVal
AND SomeOtherCol =  
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN
@SomeVal
     WHEN...
...
     ELSE
@SomeVal OR @SomeVal - 1
END 

Естественно, это выдает эту ошибку: Неверный синтаксис рядом с ключевым словом «ИЛИ». в заявлении ELSE

Отсюда мой вопрос ... какую правильную / альтернативную логику я могу использовать для достижения этой цели?
Заранее спасибо

1 Ответ

1 голос
/ 11 августа 2009

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)

Полагаю, в этом есть больше логики, чем вам нужно, и если бы специфика вашей ситуации была известна, можно было бы написать гораздо более простое и понятное утверждение.

...