2016-08-04 2 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

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