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;
'오라클' 카테고리의 다른 글
sql 오류: ora-30926: 원본 테이블의 고정 행 집합을 가져올 수 없습니다 (0) | 2024.03.27 |
---|---|
오라클 반복문 FOR 사용해서 변수에 데이터 저장 (0) | 2024.03.27 |
Oracle SQL Developer 프로시저 디버깅 (0) | 2024.03.25 |
프로시저내 문자열 찾는 방법 (0) | 2024.03.06 |
ORA-01403: no data found (오라클 SELECT문 예외처리) (0) | 2024.02.24 |