오라클 쿼리 질문입니다. 0 2 727

by 서상혁 [2015.10.07 21:17:00]


A_TABLE (변경전)

CODE 변경일자
A 20150101
A 20150205
A 20150210
A 20150301

A_TABLE(변경후)

CODE ㅅㅣ작일 종료일
A 20150101 20150204
A 20150205 20150209
A 20150210 20150228
A 20150301 99991231

변경 전 테이블에는 변경일자 컬럼만 존재 했는데, 변경일자 컬럼을 시작일, 종료일 두개 컬럼으로 분리 해야하는 사정이 생겼는데요. 좋은 방법이 없을까요. 고수님들 답변 기다리겠습니다.

WITH A_TABLE AS(

SELECT 'A'  AS CODE, '20150101' AS 변경일자 FROM DUAL UNION ALL

SELECT 'A'  AS CODE, '20150205' AS 변경일자 FROM DUAL UNION ALL

SELECT 'A'  AS CODE, '20150210' AS 변경일자 FROM DUAL UNION ALL

SELECT 'A'  AS CODE, '20150301' AS 변경일자 FROM DUAL )

SELECT * FROM A_TABLE;

 

 

by jkson [2015.10.08 08:05:06]

code와 시작일자가 pk이고 종료일 컬럼을 dt_to라고 만든다고 했을 때

MERGE INTO a_table a
   USING (
          SELECT code
               , dt
               , TO_CHAR (TO_DATE (LEAD (dt) OVER (PARTITION BY code ORDER BY dt), 'yyyymmdd') - 1, 'yyyymmdd') todt
            FROM a_table) b
   ON (a.code = b.code AND a.dt = b.dt)
   WHEN MATCHED THEN
      UPDATE
         SET a.dt_to = b.todt

 


by 서상혁 [2015.10.08 10:15:55]
감사합니다. 덕분에 잘 해결됐습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입