CASE WHEN THEN "mehrere Anweisungen möglich?" END

Guten Abend,

ich muß mal saublöd nach CASE WHEN THEN fragen.

Ich habe eine Kundentabelle mit Spalten “Anrede”, “Vorname”, “Nachname” , “Anschrift”, usw.
Da der Kunde ggf. auch ein Firmeninhaber ist, hat die Tabelle weitere Spalten für die Firmenanschrift (Postleitzahl, Straße, Ort der Firma). Sprich es gibt zwei unterschiedliche Anschriftmöglichkeiten.

Jetzt will ich eine View erstellen die mittels CASE die Anrede auswertet und entsprechend nach THEN sollen dann Straße, Postleitzahl kommen…

CASE WHEN (tbl_kunde.anrede = 'Herr') OR (tbl_kunde.anrede = 'Frau') THEN tbl_kunde.vorname AS "Vorname", tbl_kunde.nachname AS "Nachname" END

Es funktioniert aber nach THEN nur ein Statement.
CASE WHEN (tbl_kunde.anrede = 'Herr') OR (tbl_kunde.anrede = 'Frau') THEN tbl_kunde.vorname END AS "Vorname"

Auch aus den Beispielen und Erklärungen die ich so im Netz gefunden habe gibt es immer nur eine Anweisung nach dem THEN.

Ist das so? Kann man da nicht mehrere Anweisungen ausführen?

Ich bin vermutlich zu blöd dafür…

Schönen Abend und schönes Wochenende!

Ja, das ist so.

Genauer gesagt, darf nach dem THEN nur (genau) ein Ausdruck stehen, der genau einen Wert liefert.

Auch der gesamte CASE Ausdruck liefert immer exakt einen Wert zurück.

1 „Gefällt mir“

Ich denke, Du meinst, mehrere Felder zurückgeben?
Eine Bedingung (ein Case When) ergibt z.B. 3 Spalten?

Ich denke Du musst das Case When dann mit identischer Bedingung und jeweils einer anderen Ergebnisspalte ausführen.
Alternativ könntest Du eine Table Function anlegen, die genau Deinem Bedarf entsprechend 2, 3, 6, … Spalten anhand einer Bedingung zurück gibt. Die Zahl wäre dann beliebig, aber in der Ausprägung einer Tablefunktion natürlich fest. Außerdem müsste man hier sorgfältig darauf achten, dass die zurückgegebene “Table” immer nur einen Datensatz enthält. Das ist nicht schwer, kann einem aber um die Ohren fliegen, wenn man es nicht beachtet.
Man müsste wahrscheinlich auch damit rechnen, dass die Table Function einen kleinen Geschwindigkeitsverlust mit sich bringt.
Und mir fällt grad ein, dass man die Zusatzspalten vielleicht “künstlich” als JSON Object Expression ausgeben kann, das man zuletzt von JSON zu ROW zurückverwandelt (populate_record).

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.