2011-09-16 10 views

Respuesta

68

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 
5

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.

+1

problema es que no está utilizando la instrucción 'in', por lo que realmente no está respondiendo la pregunta –

+0

@ t-clausen.dk: Si solo desea responder exactamente como se indicó, la única respuesta posible es "No ", y eso no es muy constructivo. – Guffa

+0

¿Cómo es la respuesta "No"? Escribo 'CASE' declaraciones con' IN' todo el tiempo ... al igual que Martin Smith, por lo que parece. –

0

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.

Cuestiones relacionadas