Podmφn∞n² v²raz CASE (SQL)

v²raz_CASE ::= jednoduch²_CASE | podmφnkov²_CASE
jednoduch²_CASE ::= CASE v²raz1 { WHEN v²raz2 THEN v²raz3 }à [ ELSE v²raz4 ] END
podmφnkov²_CASE ::= CASE { WHEN podmφnka THEN v²raz3 }à [ ELSE v²raz4 ] END

V²raz CASE slou₧φ k v²b∞ru hodnoty jednoho z v²raz∙ na zßklad∞ udan²ch podmφnek. V jednoduchΘm CASE se zleva doprava hledß v∞tev WHEN, v nφ₧ v²raz2 mß stejnou hodnotu jako v²raz1. V podmφnkovΘm CASE se zleva doprava hledß v∞tev WHEN, v nφ₧ je podmφnka spln∞nß. Je-li nalezena vyhovujφcφ v∞tev, pak hodnotou v²razu CASE se stane hodnota v²razu3 v tΘto v∞tvi. Pokud ₧ßdnß v∞tev nevyhovφ, je hodnotou v²razu CASE hodnota v²razu4, a nenφ-li v²raz4 uveden, pak NULL.

VÜechny v²razy2 musφ b²t takovΘho typu, aby byly porovnatelnΘ s v²razem1. VÜechny v²razy3 a v²raz4 musφ b²t p°eveditelnΘ na spoleΦn² typ.

P°φklad pou₧itφ:

SELECT Zakaznici.jmeno, CASE 
                          WHEN SUM(Vypujcky.cena) IS NULL THEN 0
                          ELSE SUM(Vypujcky.cena)
                        END
FROM Zakaznici LEFT OUTER JOIN Vypujcky ON (Zakaznici.rod_cis=Vypujcky. rod_cis)
GROUP BY Zakaznici.jmeno

Poznßmka:

Stejn² p°φklad lze vy°eÜit elegantn∞ji pomocφ funkce COALESCE

P°φklad pou₧itφ:

...
CASE
  WHEN n <> 0 THEN x/n
  ELSE 0
END
...

P°φklad pou₧itφ jednoduchΘho CASE:

SELECT jmeno, vek, CASE pohlavi
                     WHEN 1 THEN "mu₧"
                     WHEN 2 THEN "₧ena"
                     ELSE "neurΦeno"
                   END,
       adresa
FROM Lidi