Domanda

Quale è completare e la sintassi corretta per l'espressione SQL Case?

È stato utile?

Soluzione

IL completare la sintassi dipende dal motore di database con cui stai lavorando:

Per SQLServer:

CASE case-expression
    WHEN when-expression-1 THEN value-1
  [ WHEN when-expression-n THEN value-n ... ]
  [ ELSE else-value ]
END

O:

CASE
    WHEN boolean-when-expression-1 THEN value-1
  [ WHEN boolean-when-expression-n THEN value-n ... ]
  [ ELSE else-value ]
END

espressioni, ecc:

case-expression    - something that produces a value
when-expression-x  - something that is compared against the case-expression
value-1            - the result of the CASE statement if:
                         the when-expression == case-expression
                      OR the boolean-when-expression == TRUE
boolean-when-exp.. - something that produces a TRUE/FALSE answer

Collegamento: CASO (Transact-SQL)

Si noti inoltre che l'ordine delle istruzioni WHEN è importante.Puoi facilmente scrivere più clausole WHEN che si sovrappongono e viene utilizzato il primo che corrisponde.

Nota:Se non viene specificata alcuna clausola ELSE e non viene trovata alcuna condizione WHEN corrispondente, il valore dell'espressione CASE sarà NULLO.

Altri suggerimenti

Considerando che hai taggato più prodotti, direi che pieno la sintassi corretta sarebbe quella presente nello standard ISO/ANSI SQL-92:

<case expression> ::=
       <case abbreviation>
     | <case specification>

<case abbreviation> ::=
       NULLIF <left paren> <value expression> <comma>
              <value expression> <right paren>
     | COALESCE <left paren> <value expression>
                { <comma> <value expression> }... <right paren>

<case specification> ::=
       <simple case>
     | <searched case>

<simple case> ::=
     CASE <case operand>
          <simple when clause>...
        [ <else clause> ]
     END

<searched case> ::=
     CASE
       <searched when clause>...
     [ <else clause> ]
     END

<simple when clause> ::= WHEN <when operand> THEN <result>

<searched when clause> ::= WHEN <search condition> THEN <result>

<else clause> ::= ELSE <result>

<case operand> ::= <value expression>

<when operand> ::= <value expression>

<result> ::= <result expression> | NULL

<result expression> ::= <value expression>

Regole di sintassi

1) NULLIF (V1, V2) is equivalent to the following <case specification>:

     CASE WHEN V1=V2 THEN NULL ELSE V1 END

2) COALESCE (V1, V2) is equivalent to the following <case specification>:

     CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

3) COALESCE (V1, V2, . . . ,n ), for n >= 3, is equivalent to the
   following <case specification>:

     CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,n )
     END

4) If a <case specification> specifies a <simple case>, then let CO
   be the <case operand>:

   a) The data type of each <when operand> WO shall be comparable
      with the data type of the <case operand>.

   b) The <case specification> is equivalent to a <searched case>
      in which each <searched when clause> specifies a <search
      condition> of the form "CO=WO".

5) At least one <result> in a <case specification> shall specify a
   <result expression>.

6) If an <else clause> is not specified, then ELSE NULL is im-
   plicit.

7) The data type of a <case specification> is determined by ap-
   plying Subclause 9.3, "Set operation result data types", to the
   data types of all <result expression>s in the <case specifica-
   tion>.

Access Rules

   None.

General Rules

1) Case:

   a) If a <result> specifies NULL, then its value is the null
      value.

   b) If a <result> specifies a <value expression>, then its value
      is the value of that <value expression>.

2) Case:

   a) If the <search condition> of some <searched when clause> in
      a <case specification> is true, then the value of the <case
      specification> is the value of the <result> of the first
      (leftmost) <searched when clause> whose <search condition> is
      true, cast as the data type of the <case specification>.

   b) If no <search condition> in a <case specification> is true,
      then the value of the <case expression> is the value of the
      <result> of the explicit or implicit <else clause>, cast as
      the data type of the <case specification>.

Ecco i CASE esempi di istruzioni dai documenti PostgreSQL (Postgres segue lo standard SQL qui):

SELECT a,
   CASE WHEN a=1 THEN 'one'
        WHEN a=2 THEN 'two'
        ELSE 'other'
   END
FROM test;

O

SELECT a,
   CASE a WHEN 1 THEN 'one'
          WHEN 2 THEN 'two'
          ELSE 'other'
   END
FROM test;

Ovviamente la seconda forma è più pulita quando si controlla semplicemente un campo rispetto a un elenco di possibili valori.La prima forma consente espressioni più complicate.

Sybase ha lo stesso sintassi del caso come SQL Server:

Descrizione

Supporta espressioni SQL condizionali;può essere utilizzato ovunque sia possibile utilizzare un'espressione di valore.

Sintassi

case 
     when search_condition then expression 
    [when search_condition then expression]...
    [else expression]
end

Sintassi dei casi e dei valori

case expression
     when expression then expression 
    [when expression then expression]...
    [else expression]
end

Parametri

caso

inizia l'espressione maiuscole e minuscole.

Quando

precede la condizione di ricerca o l'espressione da confrontare.

condizione_ricerca

viene utilizzato per impostare le condizioni per i risultati selezionati.Le condizioni di ricerca per le espressioni maiuscole e minuscole sono simili alle condizioni di ricerca in una clausola where.Le condizioni di ricerca sono dettagliate nella Guida per l'utente di Transact-SQL.

Poi

precede l'espressione che specifica il valore risultante case.

espressione

è un nome di colonna, una costante, una funzione, una sottoquery o qualsiasi combinazione di nomi di colonna, costanti e funzioni collegate da operatori aritmetici o bit a bit.Per ulteriori informazioni sulle espressioni, vedere "Espressioni" in.

Esempio

select disaster, 
       case
            when disaster = "earthquake" 
                then "stand in doorway"
            when disaster = "nuclear apocalypse" 
                then "hide in basement"
            when monster = "zombie apocalypse" 
                then "hide with Chuck Norris"
            else
                then "ask mom"
       end 
  from endoftheworld

Ho scavato la pagina Oracle per lo stesso e sembra che questa sia la stessa sintassi, solo descritta leggermente diversa.

Collegamento: Oracle/PLSQL:Dichiarazione del caso

Oracolo sintassi dalla documentazione 11g:

CASE { simple_case_expression | searched_case_expression }
     [ else_clause ]
     END

espressione_caso_semplice

expr { WHEN comparison_expr THEN return_expr }...

espressione_case_cercata

{ WHEN condition THEN return_expr }...

else_clausola

ELSE else_expr

Un punto da notare nel caso di Oracle, in caso negativo quando corrisponde e non c'è nessun'altra parte viene sollevata un'eccezione.

Sintassi dell'istruzione Case in SQL SERVER:

CASE column
   WHEN value1 THEN 1
   WHEN value3 THEN 2
   WHEN value3 THEN 3
   WHEN value1 THEN 4
   ELSE ''
END

E possiamo usare anche come di seguito:

CASE 
   WHEN column=value1 THEN 1
   WHEN column=value3 THEN 2
   WHEN column=value3 THEN 3
   WHEN column=value1 THEN 4
   ELSE ''
END
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top