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