web-dev-qa-db-fra.com

Instruction CASE IN à valeurs multiples

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
34
mameesh

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  
76
Martin Smith

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.

8
Guffa

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.

0
Lukasz Szozda