데이터 가공 질문입니다. 0 2 1,159

by 니나노 [CUBRID] 큐브리드 [2016.06.13 10:38:54]


질문이요.PNG (11,287Bytes)

올린이미지를 확인하면

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로 한번해보려 했는데 잘안되서 부득이하게 질문 올려봅니다.

by 마농 [2016.06.17 13:32:39]
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
;

 


by 니나노 [2016.06.21 16:40:35]

마농님 감사합니다. 오늘도 하나 배워갑니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입