¿Hay alguna forma de hacer una sentencia CASE con una cláusula IN?Sentencia CASE IN con valores múltiples
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
¿Hay alguna forma de hacer una sentencia CASE con una cláusula IN?Sentencia CASE IN con valores múltiples
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
Sí. Es necesario utilizar el formulario de "buscado" en lugar de la forma "simple" de la expresión 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
Puede devolver el mismo valor de varios partidos
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
Esto probablemente dará lugar a la mismo plan de ejecución que la sugerencia de Martins, así que es más una cuestión de cómo quieres escribirlo.
Si usted tiene más números o si tiene intención de añadir nuevos números de prueba para CASE
continuación, puede utilizar un enfoque más flexible:
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;
Además, en lugar de la variable de tabla se puede utilizar una mesa normal.
problema es que no está utilizando la instrucción 'in', por lo que realmente no está respondiendo la pregunta –
@ t-clausen.dk: Si solo desea responder exactamente como se indicó, la única respuesta posible es "No ", y eso no es muy constructivo. – Guffa
¿Cómo es la respuesta "No"? Escribo 'CASE' declaraciones con' IN' todo el tiempo ... al igual que Martin Smith, por lo que parece. –