Est-il possible de faire une déclaration CASE avec une clause IN?
SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
Oui. Vous devez utiliser le formulaire "Recherché" plutôt que le formulaire "Simple" de la CASE
expression
SELECT CASE
WHEN c.Number IN ( '1121231', '31242323' ) THEN 1
WHEN c.Number IN ( '234523', '2342423' ) THEN 2
END AS Test
FROM tblClient c
Vous pouvez renvoyer la même valeur de plusieurs correspondances:
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
Cela aboutira probablement au même plan d'exécution que la suggestion de Martins, il s'agit donc davantage de savoir comment vous voulez l'écrire.
La question est spécifique à SQL Server, mais je voudrais étendre/ la réponse de Martin Smith .
La norme SQL: 2003 permet de définir plusieurs valeurs pour expression de cas simple:
SELECT CASE c.Number
WHEN '1121231','31242323' THEN 1
WHEN '234523','2342423' THEN 2
END AS Test
FROM tblClient c;
C'est une fonction facultative: Prédicats séparés par des virgules dans une expression CASE simple “(F263) .
Syntaxe:
CASE <common operand>
WHEN <expression>[, <expression> ...] THEN <result>
[WHEN <expression>[, <expression> ...] THEN <result>
...]
[ELSE <result>]
END
En ce qui concerne savoir, je ne suis au courant d'aucun SGBDR prenant en charge cette syntaxe.