Articles

instrukcja SQL CASE – proste i wyszukiwane formularze

głównym celem wyrażenia SQL CASE jest zwrócenie wartości opartej na jednym lub kilku testach warunkowych . Wyrażenia przypadków użycia w dowolnym miejscu wyrażenia instrukcji SQL są dozwolone. Chociaż naprawdę jest to wyrażenie, niektórzy ludzie nazywają je ” stwierdzeniami przypadków.”Najprawdopodobniej wynika to z ich zastosowania w językach programowania.

wyrażenie przypadku SQL jest niezwykle wszechstronne i stosowane w zapytaniach SQLServer. W szczególności jest on używany w klauzulach SELECT column list, GROUP BY, HAVING i ORDER BY. Wyrażenie CASE standaryzuje również (upiększa) dane lub wykonuje kontrole w celu ochrony przed błędami, takimi jak divide przez zero.

wszystkie przykłady tej lekcji są oparte na Microsoft SQL Server Management Studio i Bazie Danych AdventureWorks2012. Pierwsze kroki przy użyciu SQL Server przy użyciu mojego bezpłatnego przewodnika i bezpłatnych narzędzi Microsoft.

SQL Server CASE Statement

istnieją dwie formy klauzuli CASE: prosta i wyszukiwana. Obie formy zwracają wynik oparty na testowaniu wyrażenia. Chociaż technicznie wyrażenia, zobaczysz, że wiele osób odnosi się do tego jako do stwierdzenia.

proste polecenie SQL CASE jest używane do testów równości. Testuje jedno wyrażenie przeciwko wielu wartościom, co czyni go doskonałym do przekształcenia jednego zestawu wartości, takich jak skróty do odpowiadającej im długiej formy.

przeszukiwane polecenie SQL CASE używa bardziej kompleksowego formatu oceny wyrażeń. Jest to dobre, gdy chcesz pracować z zakresami danych, takimi jak zakresy wynagrodzeń lub wieku.

najpierw zaczynamy od prostego formularza, a następnie przeszukiwania okładki.

wyrażenie CASE prosta forma

prosta forma wyrażenia CASE porównuje wyniki wyrażenia z serią testów i zwraca „wynik”, gdy „test” zwraca true.

ogólna forma wyrażenia przypadku postaci prostej to:

CASE expression
WHEN test THEN result

ELSE otherResult
END

polecenie ELSE jest opcjonalne w wyrażeniu przypadku. Zwraca „otherResult”, gdy nie ma dopasowania, a ELSE jest obecny. Jeżeli w instrukcji CASE nie ma nic innego, wtedy zwraca NULL.

klauzula ELSE jest świetnym sposobem na wyłapanie złych lub nieoczekiwanych wartości danych i zwrócenie wyniku innego niż NULL.

przykład transformacji danych

istnieje kilka powodów, dla których należy użyć instrukcji CASE. Pierwszym z nich jest przekształcenie danych z jednego zestawu wartości do drugiego. Na przykład, aby wyświetlić płeć pracownika jako „męską” lub „żeńską”, gdy dane są zakodowane jako „M” lub „F”, użyj wyrażenia wielkości liter, aby przetestować reprezentację pojedynczego znaku i zwrócić jej odpowiednią długą formę.

przykładem tego jest:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

przykład standaryzacji danych

Podobnie można użyć prostej klauzuli CASE do standaryzacji kilku wartości w jedną. Rozszerzenie naszego przykładu mapuje kilka odmian do męskiego lub żeńskiego:

możesz się zastanawiać, czy możesz po prostu utworzyć kolejną tabelę w bazie danych i użyć jej do wyszukiwania wartości. Zgodziłbym się, że byłoby najlepiej, ale w wielu sytuacjach nie będziesz miał uprawnień do tworzenia tabel w bazie danych. W takim przypadku pozostawia cię do dyspozycji instrukcja SELECT.

podsumowanie

oto kilka rzeczy do rozważenia przy użyciu prostego wyrażenia przypadku:

  • pozwala tylko na porównania równości.
  • ewaluuje testy są ewaluowane w określonej kolejności.
  • zwraca wynik odpowiadający pierwszemu prawdziwemu testowi.
  • Jeśli nie zostanie wykonane dopasowanie, case zwraca NULL, chyba że występuje ELSE.

forma wyszukiwania wyrażenia CASE

forma wyszukiwania wyrażenia CASE pozwala na bardziej wszechstronne testowanie. Użyj go do oceny większego zakresu testów. W rzeczywistości każde wyrażenie logiczne kwalifikuje się jako test.

szukane z wyrażenia CASE ma ten format

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

w wyszukiwanym formularzu użyj klauzul WHEN do obliczenia wyrażeń logicznych. Zwracany jest wynik pierwszego prawdziwego wyrażenia logicznego.

Poniżej znajduje się przeszukiwana forma przypadku przykładu płci pracownika z poprzedniej sekcji.

użyliśmy tego samego przykładu dla prostej instrukcji SQL case. Zrobiłem to, żebyś mógł zobaczyć subtelną różnicę. Zauważ, że każda klauzula WHEN zawiera teraz test jako wyrażenie logiczne.

porównanie formularzy prostych i przeszukiwanych CASE SQL

oto instrukcje obok siebie:

proste i przeszukiwane wyrażenie CASE

we wszystkich moich SQL używam formatu przeszukiwanych przypadków. Powód jest prosty, muszę zapamiętać tylko jeden format!

ponieważ testujemy wyrażenia logiczne, przeszukiwane polecenie CASE nie ogranicza się tylko do testów równości. To sprawia, że ta forma jest naprawdę dobra do porównywania zakresów wartości. Być może kierownik sprzedaży Adventure Works chce uporządkować produkty według przedziału cenowego. Jak można to zrobić z SQL?

biorąc pod uwagę następujące nazwy i zakresy podane przez menedżera sprzedaży, możemy skonstruować wyrażenie CASE, aby porównać ListPrice do zakresu wartości, a następnie zwrócić odpowiednią nazwę zakresu cenowego.

Instrukcja case jest umieszczona na liście SELECT column i zwraca wartość znakową. Oto SQL, który robi sztuczkę:

Po uruchomieniu tego zapytania zobaczysz listę cen i wyświetli wartości zgodnie z zakresami określonymi w wyrażeniu CASE:

wyniki instrukcji CASE

instrukcje CASE mogą również służyć do zapobiegania błędom. Dobrym przykładem jest test poprawnych wartości w wyrażeniach, takich jak dzielenie liczb.

rozważ

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

To polecenie zwraca wiadomość

Divide by zero error encountered.

używając klauzuli CASE możemy upewnić się, że nie dzielimy przypadkowo przez zero.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

wyrażenie CASE może być użyte wszędzie tam, gdzie może być użyte wyrażenie. Oznacza to, że można go użyć do zwrócenia wyniku wartości kolumny lub nawet użyć go w klauzuli ORDER BY.

w poniższej sekcji przeanalizujemy użycie CASE w klauzulach ORDER BY i GROUP BY.

wyrażenie przypadku w kolejności

kontynuując żądanie kierownika sprzedaży, Załóżmy, że chce również zobaczyć produkty posortowane według przedziału cenowego, a następnie nazwy produktu. Widzieliśmy, jak możemy wyświetlać przedziały cenowe jako kolumnę, ale jak sortować?

właściwie jest to całkiem proste. Ponieważ CASE jest wyrażeniem, możemy użyć go jako jednej z wartości, z których wynika kolejność. Pamiętaj, że nie ograniczamy się tylko do sortowania kolumn tabeli, możemy również sortować wyrażenie.

oto zapytanie do sortowania według przedziału cenowego.

następnie możemy dodać polecenie CASE, aby wybrać listę, aby również wyświetlić przedział cenowy.

jak widzisz, sprawy zaczynają się komplikować. Czy widzisz, jak instrukcja CASE jest powtarzana zarówno na liście SELECT, jak i w kolejności? Na szczęście możemy to nieco uprościć, ale usunięcie instrukcji CASE Z zamówienia i zastąpienie jej nazwą aliasu select list wyrażenia CASE pricerange w ten sposób:

wyrażenie CASE w grupie przez

teraz, gdy daliśmy menedżerowi sprzedaży szczegółową listę, chce zobaczyć dane podsumowujące – czy to się nigdy nie kończy? Z mojego doświadczenia Nie, więc znając wiele SQL zaspokoić wymagania klientów jest kluczem do sukcesu.

w każdym razie, dobrą wiadomością jest to, że możemy użyć wyrażenia CASE, które zbudowaliśmy, aby utworzyć grupy podsumowań. W poniższym SQL grupujemy dane według cennika. Tworzone są zbiorcze statystyki dotyczące minimalnej, maksymalnej i średniej ceny listy.

w przeciwieństwie do klauzuli ORDER BY, nie możemy odwołać się do aliasu kolumny PriceRange w grupie by. Całe wyrażenie przypadku musi zostać powtórzone. Oto wyniki naszego zapytania:

Results – wyrażenie przypadku w grupie według

Wrap Up

jak widać, użycie wyrażeń wielkości liter zwiększa wszechstronność poleceń SQL. Umożliwiają one nie tylko przekształcanie danych z jednego zestawu wartości do drugiego, ale mogą również służyć do zapewnienia, że instrukcje nie zwracają błędów.

z dwóch formularzy, prostych i wyszukiwanych, zwykle używam formularza wyszukiwania. Powodem jest to, że prosta forma ogranicza się do testów równości, podczas gdy szukana forma może zrobić to i więcej.

ponieważ wyrażenia CASE są wyrażeniami, a nie wyrażeniami lub klauzulami, mogą być używane tam, gdzie używane jest inne wyrażenie. Oznacza to, że można używać całej instrukcji SELECT i gdzie indziej w SQL.