오라클
오라클 MERGE - 다중 행 업데이트 (같은 테이블에서)
code094
2024. 3. 26. 10:44
A | B | C | D |
1 | 1 | 1001101 | KEY |
1 | 1 | 1001001 | KEY |
C 컬럼이 더 큰 수를 가진 행의 B =B + 1 ,
작은 값을 가진 행의 A = 2 로 업데이트 (D는 2개의 행을 구분할 수 있는 값)
A | B | C | D |
1 | 2 | 1001101 | KEY |
2 | 1 | 1001001 | KEY |
MERGE INTO TB_TRANSFER T
USING (
SELECT
MAX(SUBSTR(C,4,2)) AS MAX_C,
MIN(SUBSTR(C,4,2)) AS MIN_C
FROM
TB_TRANSFER
WHERE
LENGTH(C)= 7
-- GROUP BY
) C_INFO
ON (
T.D = C_INFO.D
AND SUBSTR(T.C,4,2) IN (C_INFO.MAX_C, C_INFO.MIN_C)
AND C_INFO.MAX_C = vVALUE
)
WHEN MATCHED THEN
UPDATE SET
T.B = CASE
WHEN SUBSTR(T.C,4,2) = C_INFO.MAX_C THEN TO_CHAR(TO_NUMBER(T.B) +1)
WHEN SUBSTR(T.C,4,2) = C_INFO.MIN_C THEN T.B
WHEN C_INFO.MAX_C = C_INFO.MIN_C THEN T.B
END,
T.A = CASE
WHEN SUBSTR(T.C,4,2) = C_INFO.MIN_C THEN 2
WHEN SUBSTR(T.C,4,2) = C_INFO.MAX_C THEN 1
WHEN C_INFO.MAX_C = C_INFO.MIN_C THEN 1
END;