# SQL CASE: Bedingungen aufstellen und abfragen

SQL CASE erlaubt es Ihnen, eine Datenbank zu manipulieren, indem Sie bestimmte Bedingungen abfragen und Resultate anzeigen lassen. Der Ansatz der Bedingung CASE ähnelt dabei der Anweisung If-then-else.

## Was ist SQL CASE?

In vielen Datenbank- und [Programmiersprachen](https://www.ionos.at/digitalguide/websites/web-entwicklung/internet-programmiersprachen/) ist die Anweisung If-then-else verbreitet. Diese führt eine Aktion so lange durch, **wie eine bestimmte Voraussetzung erfüllt ist**. Trifft dies nicht länger zu, verlässt das entsprechende Programm die Schleife oder führt eine andere Aktion aus. Die [Structured Query Language](https://www.ionos.at/digitalguide/server/knowhow/was-ist-sql/) setzt auf ein ähnliches Prinzip und stellt die Anweisung SQL CASE zur Verfügung. Diese durchläuft eine Liste von Bedingungen und antwortet mit einem bestimmten Wert, sofern eine Bedingung erfüllt wird. Wird keine Bedingung erfüllt, antwortet sie mit einem Wert, der unter ELSE definiert ist. Gibt es keine ELSE-Einschränkung und keine Erfüllung der Bedingungen, wird NULL ausgegeben.

## Syntax und Funktionsweise

Die grundsätzliche Syntax von SQL CASE sieht aus wie folgt:

```sql
SELECT spalte1, spalte2, …,
CASE
	WHEN bedingung1 THEN resultat1
END AS name
FROM name_der_tabelle;
```

Dabei geben Sie mit dem den [SQL-Befehl](https://www.ionos.at/digitalguide/server/konfiguration/sql-befehle/) SELECT an, welche Spalten berücksichtigt werden sollen. Mit CASE überprüfen Sie die Bedingung. Trifft diese zu (ist sie also true), wird der Wert des hinterlegten Resultats ausgespielt. END AS beendet die Schleife. FROM gibt an, in welcher Tabelle diese Schleife durchgeführt werden soll.

Mit der optionalen Einschränkung ELSE sieht die Syntax folgendermaßen aus:

```sql
SELECT spalte1, spalte2, …,
CASE
	WHEN bedingung1 THEN resultat1
	ELSE anderes_resultat
END AS name
FROM name_der_tabelle;
```

## Beispiel für die Bedingung

Um die Funktionsweise von SQL CASE zu veranschaulichen, erstellen wir eine einfache Tabelle namens „Kundenliste“. Hier hinterlegen wir eine Kundennummer, den Namen des Kunden bzw. der Kundin, ihren oder seinen Standort, das Bestelldatum, die Anzahl der bestellten Artikel und den bezahlten Betrag in Euro.

<table>
  <thead>
    <tr>
      <th><strong>Kundennummer</strong></th>
      <th><strong>Name</strong></th>
      <th><strong>Standort</strong></th>
      <th><strong>Datum</strong></th>
      <th><strong>Artikel</strong></th>
      <th><strong>Gesamtbetrag</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Schmidt</td>
      <td>Berlin</td>
      <td>1/13/2024</td>
      <td>14</td>
      <td>634</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Schulz</td>
      <td>Hamburg</td>
      <td>1/19/2024</td>
      <td>9</td>
      <td>220</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Peters</td>
      <td>Hamburg</td>
      <td>1/3/2024</td>
      <td>15</td>
      <td>400</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Müller</td>
      <td>München</td>
      <td>1/19/2024</td>
      <td>22</td>
      <td>912</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Passau</td>
      <td>2/1/2024</td>
      <td>10</td>
      <td>312</td>
    </tr>
  </tbody>
</table>

Nun nutzen wir die Bedingung, um die Liste durchzuarbeiten. Für Gesamtbeträge über 400 Euro soll ein bestimmter Text ausgegeben werden. Dies gilt ebenso für Beträge unter 400 Euro. Die Einschränkung ELSE nutzen wir für Bestellungen, die genau bei 400 Euro liegen. Sie sehen dabei bereits, dass auch mehrere Bedingungen hintereinander abgefragt werden können. Die passende Syntax für unser Beispiel ist diese:

```sql
SELECT Kundennummer, Name, Standort, Datum, Artikel, Gesamtbetrag
CASE
	WHEN Gesamtbetrag > 400 THEN 'Der Einkaufswert liegt über 400 Euro'
	WHEN Gesamtbetrag < 400 THEN ''Der Einkaufswert liegt unter 400 Euro'
	ELSE 'Der Einkaufswert beträgt genau 400 Euro'
END AS Bestelldetails
FROM Kundenliste;
```

Die entsprechende Ausgabe sieht so aus:

<table>
  <thead>
    <tr>
      <th><strong>Kundennummer</strong></th>
      <th><strong>Name</strong></th>
      <th><strong>Standort</strong></th>
      <th><strong>Datum</strong></th>
      <th><strong>Artikel</strong></th>
      <th><strong>Gesamtbetrag</strong></th>
      <th><strong>Bestelldetails</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1427</td>
      <td>Schmidt</td>
      <td>Berlin</td>
      <td>1/13/2024</td>
      <td>14</td>
      <td>634</td>
      <td>Der Einkaufswert liegt über 400 Euro</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Schulz</td>
      <td>Hamburg</td>
      <td>1/19/2024</td>
      <td>9</td>
      <td>220</td>
      <td>Der Einkaufswert liegt unter 400 Euro</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Peters</td>
      <td>Hamburg</td>
      <td>1/3/2024</td>
      <td>15</td>
      <td>400</td>
      <td>Der Einkaufswert beträgt genau 400 Euro</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Müller</td>
      <td>München</td>
      <td>1/19/2024</td>
      <td>22</td>
      <td>912</td>
      <td>Der Einkaufswert liegt über 400 Euro</td>
    </tr>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Passau</td>
      <td>2/1/2024</td>
      <td>10</td>
      <td>312</td>
      <td>Der Einkaufswert liegt unter 400 Euro</td>
    </tr>
  </tbody>
</table>

## Kombination mit anderen Anweisungen

Sie können die Bedingungen auch innerhalb anderer Anweisungen abfragen. Im Folgenden ordnen wir die Einträge nach Kundennummer an. Wenn diese nicht angegeben (also NULL) ist, soll stattdessen der Kundenname berücksichtigt werden. Dies ist der entsprechende Code:

```sql
SELECT Kundennummer, Name, Standort, Datum, Artikel, Gesamtbetrag
FROM Kundenliste
ORDER BY
(CASE
		WHEN Kundennummer IS NULL THEN Name
		ELSE Kundennummer
END);
```

Die Ausgabe ist dann diese:

<table>
  <thead>
    <tr>
      <th><strong>Kundennummer</strong></th>
      <th><strong>Name</strong></th>
      <th><strong>Standort</strong></th>
      <th><strong>Datum</strong></th>
      <th><strong>Artikel</strong></th>
      <th><strong>Gesamtbetrag</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1118</td>
      <td>Becker</td>
      <td>Passau</td>
      <td>2/1/2024</td>
      <td>10</td>
      <td>312</td>
    </tr>
    <tr>
      <td>1212</td>
      <td>Peters</td>
      <td>Hamburg</td>
      <td>1/3/2024</td>
      <td>15</td>
      <td>400</td>
    </tr>
    <tr>
      <td>1377</td>
      <td>Schulz</td>
      <td>Hamburg</td>
      <td>1/19/2024</td>
      <td>9</td>
      <td>220</td>
    </tr>
    <tr>
      <td>1427</td>
      <td>Schmidt</td>
      <td>Berlin</td>
      <td>1/13/2024</td>
      <td>14</td>
      <td>634</td>
    </tr>
    <tr>
      <td>1431</td>
      <td>Müller</td>
      <td>München</td>
      <td>1/19/2024</td>
      <td>22</td>
      <td>912</td>
    </tr>
  </tbody>
</table>

Tipp Mit [SQL-Server-Hosting](https://www.ionos.at/cloud/sql-server-hosting "SQL-Server-Hosting von IONOS") von IONOS haben Sie die Wahl zwischen MSSQL, MySQL oder MariaDB. Profitieren Sie von einer außergewöhnlichen Performance, einer starken Sicherheitsarchitektur und persönlicher Beratung!


This is a markdown version of: [https://www.ionos.at/digitalguide/server/konfiguration/sql-case/](https://www.ionos.at/digitalguide/server/konfiguration/sql-case/) for AI/LLM consumption.