Оператор 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'))))