2016-08-04 10 views
1

Ich versuche, eine Spalte Plan_Status basierend auf dem Wert einer anderen Tabelle main, Spalte Days_At_Step zu aktualisieren.
Die folgenden Anweisungen funktionieren jedoch, wie würde ich dies als eine bedingte Anweisung strukturieren?
Oder gibt es eine andere Strategie, die ich verwenden könnte?Bedingte UPDATE-Anweisung mit JOIN

Ich glaube, es gibt einen besseren Weg als drei identische Aussagen mit verschiedenen WHERE-Bedingungen zu verwenden.

UPDATE controlState 
    SET Plan_Status=1 
    FROM controlState JOIN main ON main.Cscc = controlState.Cscc 
    WHERE Days_At_Step < 2; 

    UPDATE controlState 
    SET Plan_Status=2 
    FROM controlState JOIN main ON main.Cscc = controlState.Cscc 
    WHERE (Days_At_Step >= 2 OR Days_At_Step < 4); 

    UPDATE controlState 
    SET Plan_Status=3 
    FROM controlState JOIN main ON main.Cscc = controlState.Cscc 
    WHERE Days_At_Step > 4; 

Antwort

0

Die drei where Klauseln alle möglichen Werte decken Days_At_Step bekommen konnte, so dass Sie wirklich nicht tun brauche eine where Klausel überhaupt. Stattdessen können Sie diese Logik in einen case Ausdruck verschieben:

UPDATE controlState 
SET Plan_Status = CASE WHEN Days_At_Step < 2 THEN 1 
          WHEN (Days_At_Step >= 2 OR Days_At_Step < 4) THEN 2 
          ELSE 3 
        END 
FROM controlState 
JOIN main ON main.Cscc = controlState.Cscc; 
0

Ich denke, das funktionieren kann:

UPDATE controlState 
SET Plan_Status = 
    CASE WHEN Days_At_Step < 2 THEN 1 
     WHEN (Days_At_Step >= 2 OR Days_At_Step < 4) THEN 2 
     WHEN Days_At_Step > 4 THEN 3 END 
FROM controlState JOIN main ON main.Cscc = controlState.Cscc 
0

Diese Arbeit sollte:

UPDATE controlState 
SET Plan_Status = CASE 
        WHEN Days_At_Step < 2 THEN 1 
        WHEN (Days_At_Step >= 2 OR Days_At_Step < 4) THEN 2 
        WHEN Days_At_Step > 4 THEN 3 END 
FROM controlState JOIN main ON main.Cscc = controlState.Cscc