SQLShack (Deutsch)

SQL Server CASE-Anweisung ist äquivalent zu “ IF-then-Anweisung in Excel.

Die CASE-Anweisung wird verwendet, um die Logik zu implementieren, in der Sie den Wert einer Spalte abhängig von den Werten in anderen Spalten festlegen möchten.

Die SQL Server CASE-Anweisung besteht aus mindestens einem Paar von WHEN-und THEN-Anweisungen. Die WHEN-Anweisung gibt die zu testende Bedingung an. Die THEN Anweisung gibt die Aktion an, wenn die WHEN Bedingung TRUE zurückgibt.,

Die ELSE-Anweisung ist optional und wird ausgeführt, wenn keine der WHEN-Bedingungen true zurückgibt. Die CASE-Anweisung endet mit einem END-Schlüsselwort.

In diesem Artikel werfen wir einen Blick auf eine Reihe verschiedener Beispiele der CASE-Anweisung. Aber bevor wir das tun, erstellen wir einige Dummy-Daten, mit denen wir arbeiten können.,/td>

CREATE Database ShowRoom;
GO
VERWENDEN ShowRoom;
CREATE TABLE Cars
(
id INT,
name VARCHAR(50) not NULL,
Firma VARCHAR(50) not NULL,
power INT not NULL,
Farbe VARCHAR(50) not NULL,
model INT not NULL,
Zustand VARCHAR(50) not NULL
)

Das obige Skript hat erstellt eine dummy-Datenbank namens ShowRoom mit einer Tabelle namens Autos., Die Tabelle Cars enthält sieben Spalten: ID, Name, Firma, Leistung, Farbe, Modell und Zustand.

Fügen wir nun einige Dummy-Daten in die Cars-Tabelle ein., Führen Sie das folgende Skript aus:

Lassen Sie uns überprüfen, wie unser Datensatz aussieht, führen Sie das folgende Skript aus:

1
SELECT * FROM *

Die Ausgabe sieht folgendermaßen aus:

Sie können sehen, dass die Bedingungsspalte derzeit in jeder Zeile ein X enthält., Wir legen den Wert der Bedingungsspalte abhängig von der Modellspalte mithilfe der CASE-Anweisung fest, damit Sie klar sehen können, was los ist.,

The syntax of the CASE statement is pretty straight forward:

1
2
3
4
5

SELECT column1,
column2,
CASE WHEN CONDITION THEN ‚Value1‘
ELSE ‚Value2‘ END AS columnX
FROM Cars

The CASE statement has to be included inside the SELECT Statement., Es beginnt mit dem Schlüsselwort CASE gefolgt vom Schlüsselwort WHEN und dann der BEDINGUNG.

Die Bedingung kann jeder gültige SQL Server-Ausdruck sein, der einen booleschen Wert zurückgibt. Zum Beispiel kann die Bedingung model > 2000, die THEN Klausel wird nach der BEDINGUNG verwendet. Wenn die BEDINGUNG true zurückgibt, wird der Wert, der der THEN Klausel folgt, in columnX gespeichert. Else, der Wert nach der ELSE-Klausel, wird ebenfalls in columnX gespeichert. Die SQL Server CASE-Anweisung endet mit der END-Klausel.,

Beispiele für CASE-Anweisungen

Sehen wir uns nun die CASE-Anweisung in Aktion an.

In einem vorherigen Abschnitt haben wir eine Tabelle mit dem Namen Cars in der ShowRoom-Datenbank erstellt.

Die Bedingungsspalte hatte für alle Zeilen den Wert X. Wir verwenden die SQL Server CASE-Anweisung, um den Wert der Bedingungsspalte auf „Neu“ zu setzen, wenn die Modellspalte einen Wert größer als 2000 hat, andernfalls wird der Wert für die Bedingungsspalte auf „Alt“gesetzt.,ok at the following script:

1
2
3
4
5

SELECT name,
model,
CASE WHEN model > 2000 THEN ‚New‘
ELSE ‚Old‘ END AS condition
FROM Cars

The above script displays the name, model and condition columns from the Cars table., Die Ausgabe des obigen Skripts sieht folgendermaßen aus:

Sie können sehen, dass der Wert von X in der Spalte Bedingung durch“ Neu „und“ Alt “ ersetzt wurde je nach Modell des Fahrzeugs.

Mehrere Bedingungen in der CASE-Anweisung

Sie können mehrere Bedingungen in der CASE-Anweisung auswerten.,

Schreiben wir eine SQL Server CASE-Anweisung, die den Wert der Bedingungsspalte auf „Neu“ setzt, wenn der Wert in der Modellspalte größer als 2010 ist, auf „Durchschnitt“, wenn der Wert in der Modellspalte größer als 2000 ist, und auf „Alt“, wenn der Wert in der Modellspalte größer als 1990 ist.,

SELECT name,
model,
CASE WHEN model > 2010 THEN ‚New‘
WHEN model > 2000 THEN ‚Average‘
WHEN model > 1990 THEN ‚Old‘
ELSE ‚Old‘ END AS condition
AUS Autos

Die Ausgabe des obigen Skripts sieht folgendermaßen aus:

Im obigen Skript haben wir der Bedingungsspalte je nach Wert in der Modellspalte drei verschiedene Werte zugewiesen.,

Im obigen Skript überlappen sich die Bedingungen jedoch als. das Modell mit einem Wert größer als 2010 hat auch einen Wert größer als 2000 und 1990. Eine bessere Möglichkeit, mehrere Bedingungen zu implementieren, besteht darin, logische Operatoren wie AND, OR, NOT usw. zu verwenden.,N model > 2010 DANN ‚New‘

WENN model > 2000 UND model <2010 DANN ‚Average‘
WENN model > 1990 UND model <2000 DANN ‚Old‘
ELSE ‚Old‘ END AS condition
FROM Cars

Die Ausgabe des obigen Skripts sieht folgendermaßen aus:

Wir können auch mehrere Bedingungen aus verschiedenen Spalten mithilfe der SQL Server CASE-Anweisung auswerten., Im folgenden Beispiel weisen wir der Spalte Bedingung den Wert „Neues Weiß“ zu, wobei das Modell größer als 2010 und die Farbe weiß ist.,HEN ‚New‘

WHEN model > 2000 AND model <2010 THEN ‚Average‘
WHEN model > 1990 AND model <2000 THEN ‚Old‘

ELSE ‚Old‘ END AS condition
FROM Cars

Die Ausgabe sieht folgendermaßen aus:

Sie können in Zeile 5 sehen, dass der Wert für die Bedingungsspalte in der Ausgabe auf „Neues Weiß“ gesetzt wurde, da die Farbe weiß ist und das Modell größer als 2010 ist.,

Verwenden von GROUP BY mit SQL Server CASE-Anweisung

Die CASE-Anweisung kann auch in Verbindung mit der GROUP BY-Anweisung verwendet werden, um Aggregatfunktionen anzuwenden.,v id=“1dd7e33b85″>

1
2
3
4
5
6
7
SELECT
CASE WHEN model > 2000 THEN ‚New‘
ELSE ‚Old‘ END AS condition,
COUNT(1) AS count
FROM Cars
GROUP BY CASE WHEN model > 2000 THEN ‚New‘
ELSE ‚Old‘ END

Im obigen Skript verwenden wir die COUNT Aggregate-Funktion mit der CASE-Anweisung.,

Die SQL Server CASE-Anweisung setzt den Wert der Bedingungsspalte auf “ Neu „oder“Alt“. Innerhalb der GROUP BY-Klausel geben wir an, dass die entsprechende Anzahl für „Neu“ um 1 erhöht wird, wenn ein Modellwert von mehr als 2000 auftritt. Der Else-Abschnitt bedeutet, dass wir die Anzahl für „Alt“ um 1 erhöhen, wenn der Wert des Modells 2000 oder weniger beträgt. Die Ausgabe des obigen Skripts sieht folgendermaßen aus:

Da unser Datensatz fünf Fahrzeuge mit einem Wert für ‚model‘ von größer als 2000 hat, können Sie eine 5 in der Spalte count für“ Neue “ Fahrzeuge sehen., Ebenso hatten wir 5 alte Fahrzeuge und daher können wir 5 für die Zählspalte von „alten“ Fahrzeugen sehen.

In ähnlicher Weise können wir UM mehr als zwei Werte gruppieren., 2000 THEN ‚Average‘

WHEN model > 1990 THEN ‚Old‘
ELSE ‚Old‘ END AS condition,
COUNT(1) AS count
FROM Cars
GROUP BY CASE WHEN model > 2010 THEN ‚New‘
WHEN model > 2000 DANN ‚Average‘
WHEN model > 1990 DANN ‚Old‘
ELSE ‚Old‘ END

Im obigen Skript gruppierten wir die Daten in drei Kategorien: „New“, „Average“ und „Old“.,

Die Ausgabe sieht folgendermaßen aus:

Sie können die Anzahl für“ Neue“,“ Durchschnittliche „und“ Alte “ Zustand Autos sehen.

Schlussfolgerung

Die CASE-Anweisung ist praktisch, wenn Sie IF-THEN-Logik in SQL Server implementieren möchten. In diesem Artikel haben wir gesehen, welche CASE-Anweisung zusammen mit ihrer Syntax ist. Wir haben auch verschiedene Beispiele für CASE-Anweisungen zusammen mit ihrer Verwendung mit der GROUP BY-Klausel gesehen.,

Andere großartige Artikel von Ben

  • SQL Server query plan Cache verstehen
  • Was ist der Unterschied zwischen gruppierten und nicht gruppierten Indizes in SQL Server?
  • Verwendung von Fensterfunktionen
  • Abfragen von Daten mithilfe der SQL Server-CASE-Anweisung
  • Autor
  • Letzte Beiträge

Ben Richardson leitet Acuity Training, einen führenden Anbieter von SQL-Schulungen in Großbritannien., Es bietet eine vollständige Palette von SQL-Schulungen, von Einführungskursen bis hin zu Schulungen für fortgeschrittene Verwaltung und Data Warehouse – siehe hier für weitere Details. Sehschärfe hat Büros in London und Guildford, Surrey., Er bloggt auch gelegentlich auf Acuity ‚ s Blog
Alle Beiträge von Ben Richardson

Neueste Beiträge von Ben Richardson (siehe alle)
  • Power BI: Wasserfalldiagramme und kombinierte Grafiken – 19. Januar 2021

Share

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.