행을 열로 변환시 유동적 컬럼에 대하여 0 2 2,411

by 마늘장아찌 [2015.09.07 15:39:13]


오늘 행열 변환이 유독 많습니다.

평상시 별 신경 안쓰고 있다가 계속 생기네요...

WITH t1 AS
(SELECT 'A' CODE, 10 seq,  'apple' nm FROM dual UNION ALL
 SELECT 'A' CODE, 20 seq, 'grape' FROM dual UNION ALL
 SELECT 'B' CODE, 1 seq, 'toy' FROM dual UNION ALL
 SELECT 'B' CODE, 5 seq, 'story' FROM dual UNION ALL
 SELECT 'B' , 20,  'music' FROM dual)
SELECT t1.*
FROM t1

설명 드리자면 A code의 경우와 같이 seq가 보통은 10 단위로 발생하는데

B code와 같이 10단위가 아닌경우가 가끔있습니다.

문제는 열 데이타로 변환시에 seq 순서대로 열로 처리하고 싶은데

기준을 어떻게 잡아야 할까요?

결과를 아래 처럼 하려고 합니다.

A  apple grape

B  toy    story   music

code별로 seq 갯수는 가변적이긴 하지만 보통 10개 정도가 max입니다.

감사합니다.

 

 

 

by 마농 [2015.09.07 16:16:00]
SELECT *
  FROM (SELECT code, nm
             , ROW_NUMBER() OVER(PARTITION BY code ORDER BY seq) rn
          FROM t1
        )
 PIVOT (MIN(nm) FOR rn IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
;

 


by 마늘장아찌 [2015.09.07 16:40:00]

seq 순서로 code로 partiton 한후 pivot하면 되겠네요.

앞으로도 유용하게 쓰일거 같습니다.

감사합니다.

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