올린이미지를 확인하면
MR_RNUM 컬럼과 REMAIN_TIME 컬럼 두개의 컬럼을 비교해서 하나의 ROW를 더 만들고 싶은데
여기서는 NEW_ROW라고 칭하겠습니다.
예를 들면
1. MR_CD 가 11001 일때
MR_RNUM 이 1이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 0
MR_RNUM 이 2이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 1
MR_RNUM 이 3이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 0
MR_RNUM 이 4이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 1
2. MR_CD 가 11002 일때
MR_RNUM 이 1이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 0 ---> 가장처음 MR_RNUM이 1 이면 REMAIN_TIME은 무조건 0입니다,
MR_RNUM 이 2이고 REMAIN_TIME 이 0.5 이면 NEW_ROW 값이 0 ---> REMAIN_TIME이 0이 아니면 NEW_ROW는 기존의 값을 유지
MR_RNUM 이 3이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 1 ---> REMAIN_TIME이 0이면 NEW_ROW는 기존과 반대되는 값을 가짐
MR_RNUM 이 4이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 0 ---> REMAIN_TIME이 0이면 NEW_ROW는 기존과 반대되는 값을 가짐
MR_RNUM 이 5이고 REMAIN_TIME 이 1 이면 NEW_ROW 값이 0 ---> REMAIN_TIME이 0이 아니면 NEW_ROW는 기존의 값을 유지
MR_RNUM 이 6이고 REMAIN_TIME 이 0 이면 NEW_ROW 값이 1 ----> REMAIN_TIME이 0이면 NEW_ROW는 기존과 반대되는 값을 가짐
이렇게 새로운 NEW_ROW를 만들어서 0과1로 이루어진 값을 넣어서 관리하고 싶은데 쿼리로 구현을 못하겠습니다.
CASE WHEN이나 DECODE로 한번해보려 했는데 잘안되서 부득이하게 질문 올려봅니다.
WITH t AS ( SELECT 0.0 remain_time, 1 rnum, 2056 mr_id, 11001 mr_cd, 1 mr_rnum FROM dual UNION ALL SELECT 0 , 2, 2078, 11001, 2 FROM dual UNION ALL SELECT 0 , 3, 2079, 11001, 3 FROM dual UNION ALL SELECT 0 , 4, 2086, 11001, 4 FROM dual UNION ALL SELECT 0 , 5, 2080, 11002, 1 FROM dual UNION ALL SELECT 0.5, 6, 2081, 11002, 2 FROM dual UNION ALL SELECT 0 , 7, 2082, 11002, 3 FROM dual UNION ALL SELECT 0.5, 8, 2087, 11002, 4 FROM dual UNION ALL SELECT 1 , 9, 2089, 11002, 5 FROM dual UNION ALL SELECT 0 , 10, 2090, 11002, 6 FROM dual UNION ALL SELECT 0 , 11, 2083, 11003, 1 FROM dual UNION ALL SELECT 0.5, 12, 2084, 11003, 2 FROM dual UNION ALL SELECT 0.5, 13, 2085, 11003, 3 FROM dual UNION ALL SELECT 0 , 14, 2088, 11003, 4 FROM dual ) SELECT remain_time, rnum, mr_id, mr_cd, mr_rnum , MOD( SUM(CASE remain_time WHEN 0 THEN 1 ELSE 0 END) OVER(PARTITION BY mr_cd ORDER BY mr_rnum) + 1, 2) new_col FROM t ;