Warunkowe wyświetlanie wartości w wyniku zapytania - CASE WHEN - Krystian Brożek acheter mectizan para que serve o ivermectina ivermectin szájon át ivermectin tablets uk will ivermectin kill fleas ivermectina farmácia do trabalhador ivermectin covid trial results pour on ivermectin for goats

Podczas tworzenia zapytań poza pobieraniem wartości bezpośrednio z kolumny mamy możliwość jej wyliczenia. Mogą to być proste lub bardziej skomplikowane obliczenia. Zdarzają się jednak przypadki, gdy wartości w kolumnie wynikowej ma kilka algorytmów, które ją wyliczają.

Funkcja CASE pozwala nam na sterowanie tym, w jaki sposób zostanie wyliczony nasz wynik. Prościej mówiąc jest to taki IF tyle, że w instrukcji SELECT.

Warunki można tworzyć w ten sam sposób co w klauzurze WHERE. Składnia dla sprawdzania różnych wartości w pojedynczym elemencie prezentuje się w następujący sposób:

CASE kolumna/zmienna
    WHEN  wartość1 THEN rezultat1
    WHEN wartość2 THEN rezultat2
    …
    ELSE domyślny_rezultat
END

Po co nam to i kiedy używać? Jeśli dla konkretnych wartości w danej kolumnie/zmiennej chcemy zmienić wartość wynikową. Np. chcielibyśmy drukować miesiące w języku polskim, które zostały wyliczone na podstawie daty sprzedaży:

SELECT CASE MONTH(DataSprzedazy)
        WHEN 1 THEN 'Styczeń'
        WHEN 2 THEN 'Luty'
        WHEN 3 THEN 'Marzec'
        WHEN 4 THEN 'Kwiecień'
        WHEN 5 THEN 'Maj'
        WHEN 6 THEN 'Czerwiec'
        WHEN 7 THEN 'Lipiec'
        WHEN 8 THEN 'Sierpień'
        WHEN 9 THEN 'Wrzesień'
        WHEN 10 THEN 'Październik'
        WHEN 11 THEN 'Listopad'
        WHEN 12 THEN 'Grudzień'
    END AS Miesiac
FROM Sprzedaz

Takie działanie wyciągnie numer miesiąca z kolumny DataSprzedazy i dla każdego wiersza pokaże wartość ze słowną nazwą.


Jeśli chcemy sprawdzać warunki, wtedy składnia CASE wygląda tak:

CASE WHEN warunek1 THEN rezultat1
    WHEN warunek2 THEN rezultat2
    …
    ELSE domyślny_rezultat
END

Bardzo prostym przykładem może być określenie płci pracowników na podstawie imienia. Polskie imiona kobiet poza kilkoma wyjątkami kończą się na literę a, zatem:

SELECT Imie,
    CASE WHEN RIGHT(Imie, 1) = 'a'
        THEN Kobieta
        ELSE Mężczyzna
    END Plec
FROM Osoby

Jako wynik otrzymamy kolumnę z imionami, a w drugiej kolumnie płeć osoby wyznaczoną na podstawie imienia.

Tak jak w przypadku instrukcji IF, tutaj ELSE też jest opcjonalny i podajemy w nim wynik, który ma zostać zwrócony, gdy żaden z warunków nie zostanie spełniony. W sytuacji braku ELSE i niespełnienia żadnego warunku pojawi się NULL.

Należy pamiętać, że jeśli rozpoczynamy instrukcję CASE musimy zakończyć ją END. Jest to bardzo często popełniany błąd nie tylko u początkujących. Co gorsza otrzymywany błąd nie naprowadza w żaden sposób na rozwiązanie problemu. Polecam pisać CASE END i później pomiędzy tymi słowami kluczowymi uzupełnić pozostałą część instrukcji.