Есть ли способ сделать оператор CASE с предложением IN?
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
Есть ли способ сделать оператор CASE с предложением IN?
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
Да. Вам нужно использовать форму "Searched", а не "Простую" форму выражения CASE
SELECT CASE
WHEN c.Number IN ( '1121231', '31242323' ) THEN 1
WHEN c.Number IN ( '234523', '2342423' ) THEN 2
END AS Test
FROM tblClient c
Вы можете вернуть одно и то же значение из нескольких совпадений:
SELECT
CASE c.Number
WHEN '1121231' THEN 1
WHEN '31242323' THEN 1
WHEN '234523' THEN 2
WHEN '2342423' THEN 2
END AS Test
FROM tblClient c
Это, вероятно, приведет к такому же плану выполнения, что и предложение Мартинса, поэтому более важно, как вы хотите его написать.
Вопрос специфичен для SQL Server, но я хотел бы расширить ответ Мартина Смита.
Стандарт SQL: 2003 позволяет определять несколько значений для простого выражения регистра:
SELECT CASE c.Number
WHEN '1121231','31242323' THEN 1
WHEN '234523','2342423' THEN 2
END AS Test
FROM tblClient c;
Это необязательная функция: разделенные запятыми предикаты в простом выражении CASE "(F263).
Синтаксис:
CASE <common operand>
WHEN <expression>[, <expression> ...] THEN <result>
[WHEN <expression>[, <expression> ...] THEN <result>
...]
[ELSE <result>]
END
Что касается знаю, я не знаю ни одной СУБД, которая на самом деле поддерживает этот synta.x
Если у вас больше номеров или вы хотите добавить новые тестовые номера для CASE
, вы можете использовать более гибкий подход:
DECLARE @Numbers TABLE
(
Number VARCHAR(50) PRIMARY KEY
,Class TINYINT NOT NULL
);
INSERT @Numbers
VALUES ('1121231',1);
INSERT @Numbers
VALUES ('31242323',1);
INSERT @Numbers
VALUES ('234523',2);
INSERT @Numbers
VALUES ('2342423',2);
SELECT c.*, n.Class
FROM tblClient c
LEFT OUTER JOIN @Numbers n ON c.Number = n.Number;
Кроме того, вместо переменной таблицы вы можете использовать обычную таблицу.