Ich schreibe eine SQL-Abfrage, bei der einige der zurückgegebenen Spalten abhängig von vielen Bedingungen berechnet werden müssen.
Ich verwende derzeit verschachtelte case-Anweisungen, aber es wird chaotisch. Gibt es einen besseren (besser organisierten und / oder lesbareren) Weg?
(Ich verwende Microsoft SQL Server, 2005)
Ein vereinfachtes Beispiel:
SELECT
col1,
col2,
col3,
CASE
WHEN condition
THEN
CASE
WHEN condition1
THEN
CASE
WHEN condition2
THEN calculation1
ELSE calculation2
END
ELSE
CASE
WHEN condition2
THEN calculation3
ELSE calculation4
END
END
ELSE
CASE
WHEN condition1
THEN
CASE
WHEN condition2
THEN calculation5
ELSE calculation6
END
ELSE
CASE
WHEN condition2
THEN calculation7
ELSE calculation8
END
END
END AS 'calculatedcol1',
col4,
col5 -- etc
FROM table
sql
sql-server
sql-server-2005
select
nested
Sophia
quelle
quelle
CASE WHEN
Antworten:
Sie könnten eine Art COALESCE-Trick ausprobieren, z.
quelle
Wickeln Sie alle diese Fälle in einen.
quelle
Sie können mehrere Bedingungen kombinieren, um die Situation zu vermeiden:
quelle
Ich persönlich mache das so und halte die eingebetteten CASE-Ausdrücke beschränkt. Ich würde auch Kommentare einfügen, um zu erklären, was los ist. Wenn es zu komplex ist, teilen Sie es in Funktion auf.
quelle
Hier ist eine einfache Lösung für die verschachtelte "komplexe" Fallanweisung: - Verschachtelter komplexer Fallausdruck
Stellen Sie einfach sicher, dass Sie für jede case-Anweisung eine end-Anweisung haben
quelle
Wir können mehrere Bedingungen miteinander kombinieren, um den Leistungsaufwand zu reduzieren.
Es gibt drei Variablen abc, für die wir Fälle ausführen möchten. Wir können dies wie folgt tun:
quelle
Eine benutzerdefinierte Funktion kann einen besseren Server bieten, zumindest um die Logik zu verbergen. wenn Sie dies in mehr als einer Abfrage tun müssen
quelle
Ich habe das durchgesehen und fand alle Antworten super cool, möchte aber die Antwort von @deejers ergänzen
Sie können ELSE optional machen, da es nicht obligatorisch ist. Es ist in vielen Szenarien sehr hilfreich.
quelle
Dieses Beispiel könnte Ihnen helfen. Das Bild zeigt, wie die SQL-Fallanweisung aussehen wird, wenn if- und mehr als eine innere if-Schleife vorhanden sind
quelle