h41msh1c0r
Goto Top

SQL Case mit unterschiedlichen WHEN Abfragen

Aloa,

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

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

SeaStorm
SeaStorm 10.07.2018 um 13:53:01 Uhr
Goto Top
ist zufällig ProcessID mit 1 oder 2 gefüllt, wenn SubProcess auf Extern steht?
H41mSh1C0R
H41mSh1C0R 10.07.2018 aktualisiert um 13:58:01 Uhr
Goto Top
jupp

Allerdings hat nicht jeder Process einen Subprocess der "Extern" heißt.

D.h. nur wenn diese Konstellation auftritt das ein Subprocess auf "Extern" steht soll "Zuarbeit" in der Spalte "Schritt" stehen, ansonsten die anderen Einträge.
ukulele-7
Lösung ukulele-7 10.07.2018 um 13:58:32 Uhr
Goto Top
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.
SeaStorm
Lösung SeaStorm 10.07.2018 aktualisiert um 14:04:44 Uhr
Goto Top
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
H41mSh1C0R
H41mSh1C0R 10.07.2018 um 14:04:28 Uhr
Goto Top
=)

Danke für den Tipp mit der Reihenfolge.

Hab die Zeile nun ganz nach oben hochgesetzt und danach die Processe auswerten lassen und es geht. =)

ds