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
Please also mark the comments that contributed to the solution of the article
Content-ID: 379723
Url: https://administrator.de/forum/sql-case-mit-unterschiedlichen-when-abfragen-379723.html
Printed on: January 25, 2025 at 00:01 o'clock
5 Comments
Latest comment
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