SQL wenn mehrere Cases zutreffen?
Hallo ich hab eine fette Case-Anweisung geschrieben, die auch funktioniert, jedoch möchte ich einen weiteren Case hinzufügen der dann zutrifft wenn mehrere der anderen Cases zutreffen (also bei mehr als einem zutreffenden Case), der dann lediglich sowas wie "mehreres trifft zu" ausgiebt.
Geht das? Bzw. wie ist da die Syntax?
Ich finde dazu leider nichts im Internet
LG
2 Antworten
Ich habe eine Idee. Findest du sie gut, musst du dich selbst um eine Umsetzung bemühen.
Normalerweise hast du so etwas wie
case when bed1 then...
else case when bed2 then...
else ...
Eventuell kannst du es so lösen, dass du den Bedingungen Werte zuweist und addierst und in einem separaten Feld die Summe abprüfst.
Pseudocode:
1*(bed1)+2*(bed2)+4*(bed3)... as ausw,
(case ausw = 0 then 'Kein Fall'
else case ausw = 1 then 'Fall 1'
else case ausw = 2 then 'Fall 2'
...
else 'Mehrere Fälle'
) as wert
Das setzt voraus, dass man sich auf berechnete Werte rückbeziehen kann und dass man bool in int casten kann. Musst du ausprobieren.
Umschreibungen sind selten hilfreich ... besonders wenn es um etwas exaktes wie SQL-Statements geht. Show Code.
Es kommt hier etwas auf den SQL-Dualekt an, aber überlicherweise werden die CASE es von oben nach unter abgearbeitet.
CASE
WHEN (Betriebsbereit = 0) AND (Kalibrierstatus = 0)
THEN "Weder betriebsbereit noch kalibriert"
WHEN Betriebsbereit=0
THEN "Nicht betriebsbereit"
WHEN Kalibrierstatus=0
THEN "Nicht Kalibriert"
ELSE "Unbekanntes Problem"
END AS Zustandsmeldung
Alternativ könntest Du das auch in mehreren CASE-Strukturen o. ä. behandeln und deren Ergebnis mit einer Zeichenketten-Verknüpfung zusammenführen.
Ich hab hier mal eine abgespeckte Version:
CASE
WHEN Betriebsbereit=0
THEN "Nicht betriebsbereit"
WHEN Kalibrierstatus=0
THEN "Nicht Kalibriert"
ELSE "Unbekanntes Problem"
END AS Zustandsmeldung
Ich arbeite in der richtigen Anweisung mit Zeitintervallen und so, das sprengt den Textrahmen.
Wenn jetzt hier beides zutrifft, dann sollte einfach sowas kommen wie "Mehreres trifft zu"
Formulierung kommt dann natürlich noch anders, wenn die Anweisung funktioniert.