Articles

SQL CASE–Anweisung – Einfache und gesuchte Formulare

Der Hauptzweck eines SQL CASE-Ausdrucks gibt einen Wert zurück, der auf einem oder mehreren bedingten Tests basiert. Use CASE Ausdrücke überall in einer SQL-Anweisung Ausdruck ist erlaubt. Obwohl wirklich ein Ausdruck, Einige Leute bezeichnen sie als „Fallanweisungen.“ Dies ist höchstwahrscheinlich auf ihre Verwendung in Programmiersprachen zurückzuführen.

Der SQL CASE-Ausdruck ist äußerst vielseitig und wird in allen SQLServer-Abfragen verwendet. Insbesondere wird es in den Klauseln SELECT column list, GROUP BY, HAVING und ORDER BY verwendet. Der CASE-Ausdruck standardisiert (verschönert) auch Daten oder führt Prüfungen durch, um vor Fehlern zu schützen, z. B. durch Null teilen.

Alle Beispiele für diese Lektion basieren auf Microsoft SQL Server Management Studio und der AdventureWorks2012-Datenbank. Erste Schritte mit SQL Server mit meinem kostenlosen Handbuch und kostenlosen Microsoft-Tools.

SQL Server CASE-Anweisung

Es gibt zwei Formen für die CASE-Klausel: einfach und gesucht. Beide Formulare geben ein Ergebnis zurück, das auf dem Testen eines Ausdrucks basiert. Obwohl technisch gesehen, werden Sie sehen, dass viele Leute es als Aussage bezeichnen.

Die einfache SQL-Anweisung CASE wird für Gleichheitstests verwendet. Es testet einen Ausdruck gegen mehrere Werte, das macht es ideal für die Umwandlung eines Satzes von Werten, wie Abkürzungen in ihre entsprechende lange Form.

Die gesuchte SQL CASE-Anweisung verwendet ein umfassenderes Ausdruckauswertungsformat. Es ist gut, wenn Sie mit Datenbereichen arbeiten möchten, z. B. Gehaltsspannen oder Alter.

Wir beginnen zuerst mit der einfachen Form und decken sie dann ab.

CASE expression Einfache Form

Die einfache Form des CASE-Ausdrucks vergleicht die Ergebnisse eines Ausdrucks mit einer Reihe von Tests und gibt ein „Ergebnis“ zurück, wenn der „test“ true zurückgibt.

Die allgemeine Form für einen einfachen Formularfallausdruck lautet:

CASE expression
WHEN test THEN result

ELSE otherResult
END

Die ELSE-Anweisung ist in einem CASE-Ausdruck optional. Es gibt „otherResult“ zurück, wenn keine Übereinstimmungen gemacht werden und ELSE vorhanden ist. Wenn die CASE-Anweisung sonst nichts enthält, wird NULL zurückgegeben.

Die ELSE-Klausel ist eine großartige Möglichkeit, fehlerhafte oder unerwartete Datenwerte abzufangen und ein anderes Ergebnis als NULL zurückzugeben.

Datentransformationsbeispiel

Es gibt mehrere Gründe, eine CASE-Anweisung zu verwenden. Die erste besteht darin, Daten von einem Wertesatz in einen anderen zu transformieren. Um beispielsweise das Geschlecht eines Mitarbeiters als „Männlich“ oder „Weiblich“ anzuzeigen, wenn Ihre Daten als „M“ oder „F“ codiert sind, verwenden Sie einen CASE-Ausdruck, um die Einzelzeichendarstellung zu testen und die entsprechende Langform zurückzugeben.

Das Beispiel dafür ist:

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

Datenstandardisierungsbeispiel

Ebenso können Sie eine einfache CASE-Klausel verwenden, um mehrere Werte zu einem zu standardisieren. Die Erweiterung unseres Beispiels ordnet mehrere Variationen entweder männlich oder weiblich zu:

Sie fragen sich vielleicht, ob Sie einfach eine andere Tabelle in Ihrer Datenbank erstellen und diese zum Nachschlagen der Werte verwenden könnten. Ich würde eher zustimmen, dass dies das Beste wäre, aber in vielen Situationen haben Sie keine Berechtigung, Tabellen in der Datenbank zu erstellen. In diesem Fall bleiben Sie Ihrem Verstand überlassen, den eine SELECT-Anweisung bereitstellt.

Zusammenfassung

Bei der Verwendung des einfachen CASE-Ausdrucks sind einige Dinge zu beachten:

  • Erlaubt nur Gleichheitsvergleiche.
  • Evaluates Tests werden in der definierten Reihenfolge ausgewertet.
  • Gibt das Ergebnis zurück, das dem ersten ECHTEN Test entspricht.
  • Wenn keine Übereinstimmung gefunden wird, gibt case NULL zurück, sofern nichts ANDERES vorhanden ist.

Gesuchte Form des Fallausdrucks

Die Suchform des Fallausdrucks ermöglicht vielseitigere Tests. Verwenden Sie es, um eine größere Auswahl an Tests zu bewerten. Tatsächlich gilt jeder boolesche Ausdruck als Test.

Ein von CASE gesuchter Ausdruck hat dieses Format

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

Verwenden Sie mit der gesuchten Form WHEN-Klauseln, um Boolesche Ausdrücke auszuwerten. Das Ergebnis des ersten WAHREN Booleschen Ausdrucks wird zurückgegeben.

Unten ist die gesuchte Fallform des Mitarbeiter-Gender-Beispiels aus dem vorherigen Abschnitt.

Wir haben dasselbe Beispiel auch für die einfache SQL case-Anweisung verwendet. Ich tat dies, damit Sie den feinen Unterschied sehen konnten. Beachten Sie, dass jede WHEN Klausel jetzt den test als booleschen Ausdruck enthält.

Vergleich von einfachen und gesuchten Formen SQL CASE

Hier sind die Anweisungen nebeneinander:

Einfacher versus gesuchter Fallausdruck

Ich neige dazu, das gesuchte CASE-Ausdruckformat in all meinem SQL zu verwenden. Dieser Grund ist einfach, ich muss mich nur an ein Format erinnern!

Da wir boolesche Ausdrücke testen, ist die gesuchte CASE-Anweisung nicht nur auf Gleichheitstests beschränkt. Dies macht dieses Formular wirklich gut zum Vergleichen von Wertebereichen. Vielleicht möchte der Verkaufsleiter von Adventure Works Produkte nach Preisklassen organisieren. Wie könnte dies mit SQL gemacht werden?

Angesichts der folgenden Namen und Bereiche, die vom Verkaufsleiter bereitgestellt werden, können wir einen CASE-Ausdruck erstellen, um den ListPrice mit einem Wertebereich zu vergleichen und dann den entsprechenden Namen der Preisspanne zurückzugeben.

Die case-Anweisung wird in die SELECT-Spaltenliste eingefügt und gibt einen Zeichenwert zurück. Hier ist die SQL, die den Trick macht:

Wenn Sie diese Abfrage ausführen, werden PriceRange aufgelistet und Werte gemäß den im CASE-Ausdruck angegebenen Bereichen angezeigt:

Ergebnisse der CASE-Anweisung

CASE-Anweisungen können auch verwendet werden, um fehler vermeiden. Ein gutes Beispiel ist das Testen auf gültige Werte in Ausdrücken, z. B. beim Teilen von Zahlen.

Betrachten Sie

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

Diese Anweisung gibt die Nachricht zurück

Divide by zero error encountered.

Durch die Verwendung einer CASE-Klausel können wir sicherstellen, dass wir nicht versehentlich durch Null dividieren.

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

Ein CASE-Ausdruck kann überall dort verwendet werden, wo ein Ausdruck verwendet werden kann. Dies bedeutet, dass Sie es verwenden können, um ein Spaltenwert-Ergebnis zurückzugeben oder es sogar in einer ORDER BY-Klausel zu verwenden.

Im folgenden Abschnitt untersuchen wir die Verwendung von CASE in den Klauseln ORDER BY und GROUP BY.

CASE expression in ORDER BY

Wenn Sie mit der Sales Manager-Anfrage fortfahren, möchten Sie die Produkte auch nach Preisklasse und dann nach Produktname sortieren. Wir haben gesehen, wie wir die Preisspannen als Spalte anzeigen können, aber wie sortieren wir?

Eigentlich ist es ziemlich einfach. Da CASE ein Ausdruck ist, können wir ihn als einen der Werte verwenden, aus denen die Ergebnisse stammen. Denken Sie daran, dass wir nicht nur Tabellenspalten sortieren müssen, sondern auch einen Ausdruck sortieren können.

Hier ist die Abfrage nach der Preisspanne zu sortieren.

Wir können dann CASE Anweisung zur Auswahlliste hinzufügen, um auch die Preisspanne anzuzeigen.

Wie Sie sehen, beginnen die Dinge kompliziert zu werden. Sehen Sie, wie die CASE-Anweisung sowohl in der SELECT-Liste als auch in ORDER BY wiederholt wird? Glücklicherweise können wir dies ein wenig vereinfachen, aber entfernen Sie die CASE-Anweisung aus ORDER BY und ersetzen Sie sie durch den Aliasnamen PriceRange des SELECT list CASE–Ausdrucks wie folgt:

CASE-Ausdruck in GROUP BY

Nachdem wir der Verkaufsleiterin eine detaillierte Auflistung gegeben haben, möchte sie Zusammenfassungsdaten sehen – endet das nicht jemals? Nach meiner Erfahrung ist dies nicht der Fall, daher ist es Ihr Schlüssel zum Erfolg, viel SQL zu kennen, um die Kundenanforderungen zu erfüllen.

Wie auch immer, die gute Nachricht ist, dass wir den CASE-Ausdruck, den wir erstellt haben, verwenden können, um Zusammenfassungsgruppen zu erstellen. Im folgenden SQL gruppieren wir die Daten nach Preisbereich. Zusammenfassende Statistiken über den minimalen, maximalen und durchschnittlichen Listenpreis werden erstellt.

Im Gegensatz zur ORDER BY-Klausel können wir den Spaltenalias PriceRange in der GROUP BY nicht referenzieren. Der gesamte CASE-Ausdruck muss wiederholt werden. Hier sind die Ergebnisse unserer Abfrage:

Ergebnisse – CASE-Ausdruck in GROUP BY

Einpacken

Wie Sie sehen können, fügt die Verwendung von CASE-Ausdrücken Ihren SQL-Anweisungen Vielseitigkeit hinzu. Sie ermöglichen es Ihnen nicht nur, Daten von einem Wertesatz in einen anderen zu transformieren, sondern können auch verwendet werden, um sicherzustellen, dass Anweisungen keine Fehler zurückgeben.

Von den beiden Formen, einfach und gesucht, neige ich dazu, das Suchformular zu verwenden. Der Grund dafür ist, dass das einfache Formular auf Gleichheitstests beschränkt ist. während das gesuchte Formular das und mehr kann.

Da CASE-Ausdrücke Ausdrücke und keine Anweisungen oder Klauseln sind, können sie dort verwendet werden, wo ein anderer Ausdruck verwendet wird. Das bedeutet, dass Sie in der gesamten SELECT-Anweisung und an anderer Stelle in SQL verwenden können.