Sintassi SQL Case Expression?

Qual è la syntax completa e corretta per l’espressione Case SQL?

La syntax completa dipende dal motore di database con cui stai lavorando:

Per SQL Server:

 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 

Link: CASE (Transact-SQL)

Si noti inoltre che l’ordine delle dichiarazioni WHEN è importante. È ansible scrivere facilmente 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à NULL .

Considerando che hai taggato più prodotti, direi che la syntax corretta è quella che si trova nello standard ISO / ANSI SQL-92:

  ::=  |   ::= NULLIF      | COALESCE   {   }...   ::=  |   ::= CASE  ... [  ] END  ::= CASE ... [  ] END  ::= WHEN  THEN   ::= WHEN  THEN   ::= ELSE   ::=   ::=   ::=  | NULL  ::=  

Regole di syntax

 1) NULLIF (V1, V2) is equivalent to the following : CASE WHEN V1=V2 THEN NULL ELSE V1 END 2) COALESCE (V1, V2) is equivalent to the following : 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 WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, . . . ,n ) END 4) If a  specifies a , then let CO be the : a) The data type of each  WO shall be comparable with the data type of the . b) The  is equivalent to a  in which each  specifies a  of the form "CO=WO". 5) At least one  in a  shall specify a . 6) If an  is not specified, then ELSE NULL is im- plicit. 7) The data type of a  is determined by ap- plying Subclause 9.3, "Set operation result data types", to the data types of all s in the . Access Rules None. General Rules 1) Case: a) If a  specifies NULL, then its value is the null value. b) If a  specifies a , then its value is the value of that . 2) Case: a) If the  of some  in a  is true, then the value of the  is the value of the  of the first (leftmost)  whose  is true, cast as the data type of the . b) If no  in a  is true, then the value of the  is the value of the  of the explicit or implicit , cast as the data type of the . 

Ecco gli esempi dell’istruzione CASE 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 il secondo modulo è più pulito quando stai solo controllando un campo contro un elenco di valori possibili. Il primo modulo consente espressioni più complicate.

Sybase ha la stessa syntax del caso di SQL Server:

Descrizione

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

Sintassi

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

Sintassi Case e valori

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

parametri

Astuccio

inizia l’espressione del caso.

quando

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

search_condition

viene utilizzato per impostare le condizioni per i risultati selezionati. Le condizioni di ricerca per le espressioni del caso sono simili alle condizioni di ricerca in una clausola where. Le condizioni di ricerca sono dettagliate nella Guida dell’utente di Transact-SQL.

poi

precede l’espressione che specifica un valore di risultato del caso.

espressione

è un nome di colonna, una costante, una funzione, una sottoquery o una combinazione di nomi di colonne, 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 syntax, appena descritta in modo leggermente diverso.

Collegamento: Oracle / PLSQL: caso

Sintassi Oracle dalla documentazione 11g :

 CASE { simple_case_expression | searched_case_expression } [ else_clause ] END 

simple_case_expression

 expr { WHEN comparison_expr THEN return_expr }... 

searched_case_expression

 { WHEN condition THEN return_expr }... 

else_clause

 ELSE else_expr 

Un punto da notare nel caso di Oracle, se no quando le partite e non c’è nessun altro parte viene sollevata un’eccezione.

Sintassi degli statement 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 come di seguito anche:

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