Оператор CASE в выражении where с использованием равных и IN

WHERE CONDITION1='ABC'
AND Status =
    CASE  @Option 
            WHEN 1 THEN 'True'
            WHEN 2 THEN 'False'
            WHEN 3 THEN  NULL
            WHEn 4 THEN **IN ('True', 'False', NULL)**
    END

Как мне написать запрос, где мои первые параметры совпадают напрямую, используя = но мой последний вариант нуждается в IN

Приведенный выше запрос выдает ошибку, но я хочу что-то похожее на это, что я не могу найти.

2 ответа

Решение

CASE оператор не может вернуть набор значений... но этот запрос должен дать вам те же результаты:

WHERE CONDITION1='ABC'
AND Status =
    CASE  
        WHEN 1 THEN 'True'
        WHEN 2 THEN 'False'
        WHEN 3 THEN NULL
        WHEN 4 THEN Status
    END

Также обратите внимание, что если у вас нет ANSI_NULLS OFF, Status никогда = NULL... вам нужно использовать IS NULL для этого сравнения, и вам нужно отказаться от CASE утверждение в целом.

Пропустите оператор CASE и используйте OR. И согласно стандарту ANSI не сравнивайте с NULL:

WHERE CONDITION1='ABC'
AND ((@Option = 1 AND Status = 'True') OR
     (@Option = 2 AND Status = 'False') OR
     (@Option = 3 AND Status IS NULL) OR
     (@Option = 4 AND (Status IS NULL OR Status IN ('True', 'False'))))
Другие вопросы по тегам