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-Key: 379723

Url: https://administrator.de/contentid/379723

Printed on: April 20, 2024 at 09:04 o'clock

Member: SeaStorm
SeaStorm Jul 10, 2018 at 11:53:01 (UTC)
Goto Top
ist zufällig ProcessID mit 1 oder 2 gefüllt, wenn SubProcess auf Extern steht?
Member: H41mSh1C0R
H41mSh1C0R Jul 10, 2018 updated at 11:58:01 (UTC)
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.
Member: ukulele-7
Solution ukulele-7 Jul 10, 2018 at 11:58:32 (UTC)
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.
Member: SeaStorm
Solution SeaStorm Jul 10, 2018 updated at 12:04:44 (UTC)
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
Member: H41mSh1C0R
H41mSh1C0R Jul 10, 2018 at 12:04:28 (UTC)
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