2016-08-04 112 views
1

我試圖根據另一個表mainDays_At_Step的值更新列Plan_Status
但是,下面的語句是如何工作的,我將如何將它作爲條件語句來構造?
或者,我可以使用另一種策略嗎?加入條件UPDATE語句

我覺得有比在不同的WHERE條件下使用三個相同的語句更好的方法。

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; 

回答

0

三個where條款涵蓋所有可能的值Days_At_Step可以得到,所以你真的不完全需要一個where條款。相反,您可以將此邏輯移至case表達式:

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

我想這可以工作:

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

這應該工作:

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