Ein CASE-Ausdruck mit COALESCE hat folgende Syntax:
case_ausdruck ::= COALESCE (
ausdruck1 ,
ausdruck2 , ...,
ausdruckn )
ausdruck
Ausdruck, dessen Auswertung einen alphanumerischen Wert, einen National-Wert, einen numerischen Wert oder einen Zeitwert ergibt.
Es darf kein multipler Wert mit Dimension > 1 sein.
Ergebnis
Das Ergebnis des CASE-Ausdrucks ist NULL, wenn alle in der Klammer enthaltenen Ausdrücke (ausdruck1... ausdruckn) NULL ergeben. Ergibt mindestens ein ausdruck einen anderen als den NULL-Wert, so ist das Ergebnis des CASE-Ausdrucks der Wert des ersten ausdruck, der nicht den NULL-Wert ergibt.
Der CASE-Ausdruck COALESCE (ausdruck1,ausdruck2)
entspricht einem CASE-Ausdruck mit Suchbedingung der folgenden Form:
CASE WHEN ausdruck1 IS NOT NULL THEN ausdruck1 ELSE ausdruck2 END
Der CASE-Ausdruck COALESCE (ausdruck1,ausdruck2,...,ausdruckn)
entspricht folgendem CASE-Ausdruck mit Suchbedingung:
CASE WHEN ausdruck1 IS NOT NULL THEN ausdruck1 ELSE COALESCE (ausdruck2 ...,ausdruckn) END
Beispiele
Eine Liste der Ansprechpartner soll für gezielte Kundenkontakte erstellt werden. Neben der Anrede, dem Nachnamen, der Telefonnummer und der Funktion soll entweder die Abteilung eines Kunden, oder, wenn diese nicht bekannt ist, zumindest der Anlass eines früheren Kontakts ermittelt werden.
SELECT anrede, nachname, kotelefon, funktion,
COALESCE(abteilung, koinfo) AS info FROM kontakt WHERE konr < 30
Ergebnistabelle
anrede | nachname | kotelefon | funktion | info |
Herr Dr. | Kuehne | 089/6361896 | Vorstand | Personal |
Herr | Walkers | 089/63640182 | Sekretaer | Vertrieb |
Herr | Loetzerich | 089/4488870 | Geschaeftsfuehrer | Netzwerke |
Herr | Schmidt | 0551/123873 | Schulung | |
Frau | Kredler | 089/923764 | Organisation | SQL-Kurs |
Nach Anrede, Nachname, Telefonnummer und Funktion wird zunächst die Abteilung eines Kunden ermittelt. Fehlt diese Information (NULL-Wert), wird für INFO der Spaltenwert für die Spalte KOINFO ermittelt. Enthält sowohl die Spalte ABTEILUNG als auch die Spalte KOINFO den NULL-Wert, dann ergibt sich auch der NULL-Wert für INFO.
Aus der Tabelle AUFTRAG soll eine Liste mit Auftragsterminen erstellt werden. Die Liste soll das Datum der Auftragserteilung, die Bezeichnung des Auftrags und einen Fertigungstermin enthalten. Ist der tatsächliche Fertigungstermin nicht bekannt, soll statt dessen der Soll-Termin eingetragen werden.
SELECT adatum, atext, COALESCE (fertigist, fertigsoll) AS termin FROM auftrag adatum atext termin <date> Mitarbeiterschulung <date> <date> Kunden-Verwaltung <date> <date> Datenbank-Entwurf Kunden <date> <date> Serienbrief-Einweisung <date> <date> Kunden-Verwaltung <date> <date> Netzwerk-Test/Vergleich <date> Mitarbeiterschulung <date>
Um die Werte für TERMIN zu ermitteln, wird zunächst die Spalte FERTIGIST ausgewertet. Ist ein Datum als Spaltenwert vorhanden, wird dieses übernommen. Wo FERTIGIST den NULL-Wert enthält, wird der entsprechende Spaltenwert aus der Spalte FERTIGSOLL ermittelt und in die Spalte TERMIN eingetragen. Enthält sowohl FERTIGIST als auch FERTIGSOLL den NULL-Wert, dann wird in die Spalte TERMIN der NULL-Wert eingetragen.