Sintaxă de exprimare a cazurilor SQL?

Ce este completă și corectați sintaxa pentru expresia de caz SQL?

0
fr hi bn
expresia cazului este termenul corect pe măsură ce se evaluează la o valoare scalară (de asemenea, în SQL o instrucțiune este terminată de "terminatorul instrucțiunii" care este semicolonul).
adăugat autor Used_By_Already, sursa

8 răspunsuri

Sintaxa completă depinde de motorul bază de date cu care lucrați:

Pentru SQL Server:

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

sau:

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

expresii 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)

Rețineți, de asemenea, că ordonarea instrucțiunilor WHEN este importantă. Puteți scrie cu ușurință mai multe clauze WHEN care se suprapun și primul care se potrivește este utilizat .

Note: If no ELSE clause is specified, and no matching WHEN-condition is found, the value of the CASE expression will be NULL.

0
adăugat
a fost întotdeauna un lucru SQL? Tocmai am descoperit recent acest lucru
adăugat autor mike james, sursa

Am sapat pagina Oracle pentru acelasi lucru si se pare ca aceasta este aceeasi sintaxa, descrisa putin diferit.

Link: Oracle/PLSQL: Case Statement

0
adăugat

Oracle sintaxă din documentația 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
0
adăugat
Mulțumesc lui Rob van Wijk, ai dreptate. Am editat răspunsul meu.
adăugat autor Leigh Riffel, sursa
Aceasta este declarația de caz PL / SQL
adăugat autor Rob van Wijk, sursa

Sintaxă de declarație de sinteză în SQL SERVER:

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

Și putem folosi mai jos:

CASE 
   WHEN column=value1 THEN 1
   WHEN column=value3 THEN 2
   WHEN column=value3 THEN 3
   WHEN column=value1 THEN 4
   ELSE ''
END
0
adăugat

Iată CASE exemple de instrucțiuni din documentele PostgreSQL (Postgres urmează standardul SQL aici):

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

sau

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

Obviously the second fsaum is cleaner when you are just checking one field against a list of possible values. The first fsaum allows msaue complicated expressions.

0
adăugat

Având în vedere că ați etichetat mai multe produse, aș spune că sintaxa corectă plin ar fi cea care se găsește în standardul ISO / ANSI SQL-92:

 ::=
       
     | 

 ::=
       NULLIF   
               
     | COALESCE  
                {   }... 

 ::=
       
     | 

 ::=
     CASE 
          ...
        [  ]
     END

 ::=
     CASE
       ...
     [  ]
     END

 ::= WHEN  THEN 

 ::= WHEN  THEN 

 ::= ELSE 

 ::= 

 ::= 

 ::=  | NULL

 ::= 

Reguli de sintaxă

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 .
0
adăugat
Singurul care a încercat să abordeze cerința de sintaxă universală!
adăugat autor Peter Majeed, sursa

Un punct de remarcat în cazul Oracle, dacă nu, atunci când se potrivește și nu există altă parte o excepție este ridicat.

0
adăugat
Nu sunt sigur la ce versiune se va aplica. Următoarele două nu ridică excepții pe 10g sau 11g. selectați cazul în care 1 = 2 apoi 'a' sfârșitul de la dual; selectați 1 caz atunci când 2, apoi 'a' sfârșitul de la dual;
adăugat autor Leigh Riffel, sursa
Acest lucru ar putea fi valabil pentru instrucțiunea CASE din PL / SQL, dar nu pentru expresia CASE în SQL
adăugat autor a_horse_with_no_name, sursa
În retrospectivă, cred că vorbeam despre 9i atunci. :)
adăugat autor Tanveer Badar, sursa

Sybase are aceeași sintaxă de caz ca SQL Server:

Descriere

Sprijină expresii SQL condiționate; poate fi folosit oriunde se poate folosi o expresie de valoare.

Sintaxă

caz 
     cand SEARCH_CONDITION apoi expresie 
    [cand SEARCH_CONDITION apoi expresie]...
    [else expresie]
end

caz and values Sintaxă

caz expresie
     cand expresie apoi expresie 
    [cand expresie apoi expresie]...
    [else expresie]
end

Parametrii

caz

begins the caz expresie.

cand

precede condiția de căutare sau expresia care trebuie comparată.

SEARCH_CONDITION

is used to set conditions for the results that are selected. Search conditions for caz expresies are similar to the search conditions in a where clause. Search conditions are detailed in the Transact-SQL User?s Guide.

apoi

precedes the expresie that specifies a result value of caz.

expresie

is a column name, a constant, a function, a subquery, or any combination of column names, constants, and functions connected by arithmetic or bitwise operators. For more information about expresies, see ?expresies? in.

Exemplu

select disaster, 
       caz
            cand disaster = "earthquake" 
                apoi "stand in doorway"
            cand disaster = "nuclear apocalypse" 
                apoi "hide in basement"
            cand monster = "zombie apocalypse" 
                apoi "hide with Chuck Norris"
            else
                apoi "ask mom"
       end 
  from endoftheworld
0
adăugat
Acest lucru a fost incredibil de util pentru înțelegerea cu ușurință a sintaxei unei instrucțiuni CASE . Vă mulțumim și + 1.
adăugat autor Mike Varosky, sursa