SQL Case mit unterschiedlichen WHEN Abfragen
Aloa,
kurzer Auszug:
Mach ich 2 mal ein Case bekomme ich die Werte geprüft und er würde mir auch jeweils eine Spalte anlegen und dort den Wert eintragen.
Ich mag das aber gern in eine Spalte haben, daher habe ich die 3 When Bedingungen in 1 Case gepackt.
Die ganzen Zeilen ProcessID macht er auch, je nachdem welchen Status ich setze. Wenn ich allerdings den Status SubProcess setze schreibt er mir nicht "Zuarbeit" in die Spalte "Schritt".
Wo liegt hier der Fehler?
VG
kurzer Auszug:
,[ProcessID] as 'ID'
,[SubProcess] as 'Sub'
,( CASE WHEN ProcessID = 1 THEN 'in Arbeit'
WHEN ProcessID = 2 THEN 'in Produktion'
WHEN SubProcess = 'Extern' THEN 'Zuarbeit'
END) as 'Schritt'
Mach ich 2 mal ein Case bekomme ich die Werte geprüft und er würde mir auch jeweils eine Spalte anlegen und dort den Wert eintragen.
Ich mag das aber gern in eine Spalte haben, daher habe ich die 3 When Bedingungen in 1 Case gepackt.
Die ganzen Zeilen ProcessID macht er auch, je nachdem welchen Status ich setze. Wenn ich allerdings den Status SubProcess setze schreibt er mir nicht "Zuarbeit" in die Spalte "Schritt".
Wo liegt hier der Fehler?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 379723
Url: https://administrator.de/forum/sql-case-mit-unterschiedlichen-when-abfragen-379723.html
Ausgedruckt am: 05.02.2025 um 11:02 Uhr
5 Kommentare
Neuester Kommentar
Die Reihenfolge ist entscheidend. Ist die erste Bedingung erfüllt wird auch der erste Wert verarbeitet und das CASE ist zuende, die anderen Bedingungen werden gar nicht geprüft. Du kannst aber eine Bedingung mit WHEN 1=1 AND ( 2=2 OR 3=3) beliebig erweitern / formulieren oder auch mehrere CASE schachteln.
vermutlich verfolgt dein SQL (welcher eigentlich?) die anderen WHENs nicht mehr, wenn davor schon einer erfolgreich war.
Also entweder den SubProcess als erstes Abfragen, oder gleich so prüfen, das es eindeutig ist.
Also Sinngemäß
WHEN Subprocess='Extern' AND (ProcessID = 1 OR ProcessID = 2) THEN 'Zuarbeit'
WHEN Subprocess='Intern' AND ProcessID = 1 THEN 'in Arbeit'
WHEN Subprocess='Intern' AND ProcessID = 2 THEN 'in Produktion'
oder was auch immer dann im SubProcess steht
Also entweder den SubProcess als erstes Abfragen, oder gleich so prüfen, das es eindeutig ist.
Also Sinngemäß
WHEN Subprocess='Extern' AND (ProcessID = 1 OR ProcessID = 2) THEN 'Zuarbeit'
WHEN Subprocess='Intern' AND ProcessID = 1 THEN 'in Arbeit'
WHEN Subprocess='Intern' AND ProcessID = 2 THEN 'in Produktion'
oder was auch immer dann im SubProcess steht