wake-up-neo.net

CASE IN-Anweisung mit mehreren Werten

Gibt es eine Möglichkeit, eine CASE-Anweisung mit einer IN-Klausel abzugeben?

SELECT
CASE c.Number
IN ('1121231','31242323') THEN 1
IN ('234523','2342423') THEN 2
END AS Test
FROM tblClient c
34
mameesh

Ja. Sie müssen statt der "einfachen" Form des Ausdrucks " CASE " die Form "Searched" verwenden

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

Sie können denselben Wert aus mehreren Übereinstimmungen zurückgeben:

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

Dies führt wahrscheinlich zu demselben Ausführungsplan wie der Vorschlag von Martins. Es ist also eher eine Frage, wie Sie ihn schreiben möchten.

8
Guffa

Die Frage ist spezifisch für SQL Server, aber ich möchte Martin Smiths Antwort erweitern. 

Mit dem SQL: 2003-Standard können mehrere Werte für simple case expression definiert werden:

SELECT CASE c.Number
          WHEN '1121231','31242323' THEN 1
          WHEN '234523','2342423' THEN 2
       END AS Test
FROM tblClient c;

Dies ist eine optionale Funktion: durch Kommas getrennte Prädikate im einfachen CASE-Ausdruck “(F263) .

Syntax:

CASE <common operand>
     WHEN <expression>[, <expression> ...] THEN <result>
    [WHEN <expression>[, <expression> ...] THEN <result>
     ...]
    [ELSE <result>]
END

Ich kenne kein RDBMS, das diese Syntax tatsächlich unterstützt.

0
Lukasz Szozda