Wyrażenie CASE zapewnia funkcjonalność
konstrukcji typu IF-THEN-ELSE w SQL.
Wynik wyrażenia CASE może być m.in.
uzależniony od wartości w jednej kolumnie :
select last_name, department_id,
case department_id
when 90 then 'Zarząd'
when 60 then 'Geeki informatyczne'
else 'Inni'
end case
from employees;
W powyższym
przykładzie jeśli w kolumnie department_id pojawi się wartość
90, case zwróci nam ciąg tekstowy „Zarząd”, jeśli pojawi się
wartość 60 dostaniemy tekst „Geeki informatyczne”. W przypadku
pojawienia się dowolnej innej wartości otrzymamy tekst „Inni”.
Po wszystkich warunkach musi być zakończenie konstrukcji klauzulą
„END CASE” lub samo „END”.
Klauzula „else”
nie jest konieczna. W przypadku pojawienia się innej niż 60 lub 90
wartości, dostaniemy NULL.
Na powyższym
obrazku widzimy też użycie aliasu dla wyrażenia CASE. Aby można
było użyć aliasu, warunki musimy zakończyć klauzulą „END”.
W przypadku zastosowania klauzuli „END CASE” dostajemy błąd.
CASE nie musi
opierać się na wartościach z jednej kolumny. Na poniższym
przykładzie pokazuję dodanie kolumny z opisem stanowiska
uzależnionym od wartości w różnych kolumnach.
select last_name,
salary,department_id,manager_id, case
when manager_id is null then
'Prezes'
when department_id=90 then 'Czlonek
zarządu'
when department_id=60 and
salary>5000 then 'Programista Oracle :)'
when department_id=100 then 'Ci co
nie chcą dać podwyżek'
else 'jacyś inni' end stanowisko
from employees;
Case
działa w taki sposób, że jeśli warunek okaże się prawdziwy, nie
sprawdza następnych. Widać to na przykładzie pracownika
„King”. Pracuje w departamencie 90 i jednocześnie ma null w
manager_id. Wyświetla się przy nim „Prezes” a nie „Członek
zarządu”, ponieważ warunek pierwszy został spełniony (null w
manager_id) i system nie sprawdzał kolejnego.
a jak się stosuje CASE w kryteriach WHERE?
OdpowiedzUsuń