2016-08-04 16 views
1

別のテーブルmainのカラムDays_At_Stepの値に基づいて、カラムPlan_Statusを更新しようとしています。
次のステートメントは機能しますが、これを条件文としてどのように構成しますか?
また、別の戦略がありますか?JOINを使用した条件付きUPDATE文

異なるWHERE条件の3つの同一のステートメントを使用するよりも良い方法があるように感じます。

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

3つの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