Sintaxe de Expressão de Caso SQL?

Qual é a syntax completa e correta para a expressão SQL Case?

A syntax completa depende do mecanismo de database com o qual você está trabalhando:

Para o SQL Server:

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

ou:

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

expressões, etc:

 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)

Observe também que a ordenação das instruções WHEN é importante. Você pode escrever facilmente várias cláusulas WHEN que se sobrepõem e a primeira coincidente é usada .

Nota : Se nenhuma cláusula ELSE for especificada e nenhuma condição WHEN-correspondente for encontrada, o valor da expressão CASE será NULL .

Considerando que você marcou vários produtos, eu diria que a syntax correta completa seria a encontrada no padrão ISO / ANSI SQL-92:

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

Regras de Sintaxe

 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 . 

Aqui estão os exemplos da instrução CASE documentos do PostgreSQL (o Postgres segue o padrão SQL aqui):

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

ou

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

Obviamente, a segunda forma é mais limpa quando você está apenas verificando um campo em relação a uma lista de possíveis valores. O primeiro formulário permite expressões mais complicadas.

O Sybase tem a mesma syntax de maiúsculas e minúsculas do SQL Server:

Descrição

Suporta expressões SQL condicionais; pode ser usado em qualquer lugar que uma expressão de valor possa ser usada.

Sintaxe

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

Sintaxe de maiúsculas e minúsculas

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

parameters

caso

começa a expressão do caso.

quando

precede a condição de pesquisa ou a expressão a ser comparada.

condição de pesquisa

é usado para definir condições para os resultados selecionados. As condições de pesquisa para expressões de caso são semelhantes às condições de pesquisa em uma cláusula where. As condições de pesquisa são detalhadas no Guia do usuário do Transact-SQL.

então

precede a expressão que especifica um valor de resultado do caso.

expressão

é um nome de coluna, uma constante, uma function, uma subconsulta ou qualquer combinação de nomes de coluna, constantes e funções conectadas por operadores aritméticos ou bit a bit. Para mais informações sobre expressões, consulte “Expressões” em.

Exemplo

 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 

Eu desenterrei a página do Oracle para o mesmo e parece que esta é a mesma syntax, apenas descrita um pouco diferente.

Link: Oracle / PLSQL: Declaração de Caso

Sintaxe do Oracle da Documentação 11g :

 CASE { simple_case_expression | searched_case_expression } [ else_clause ] END 

simple_case_expression

 expr { WHEN comparison_expr THEN return_expr }... 

procure_case_expressão

 { WHEN condition THEN return_expr }... 

else_clause

 ELSE else_expr 

Um ponto a ser observado no caso da Oracle, se não houver correspondência e não houver mais nenhuma exceção, será levantada.

Sintaxe da instrução de caso no SQL SERVER:

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

E nós podemos usar como abaixo também:

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