세로 컬럼을 가로 컬럼으로 바꾸기(오라클 버전 10g) 0 5 2,263

by Taems [Oracle 기초] [2018.04.06 16:17:28]


세로 컬럼을 가로 컬럼으로 바꾸기(오라클 버전 10g) 문의 드립니다. 아래 처럼 NUM_CD 한 사람의 세로로 나와 있는 데이터 컬럼을

결과 처럼 가로로 바꿔 표현 할 수 있을까요?  

NUM_CD 마다 데이터가 5개일수도 있고 2개 일수도 있습니다. 조언 부탁드리겠습니다~

NUM_CD GUBUN GUBUN_CODE CLASS
5236794 기타 G1 5-A
5236794 피아노 P1 5-A
5236794 피아노 P1 7-A
5236794 트럼펫 T1 2-A
5236794 섹소폰 S1 3-A
3456 기타 G1 1-A
3456 피아노 P1 5-A

 

결과=========================================================================================================

NUM_CD GUBUN 1 GUBUN_CODE 1 CLASS 1 GUBUN 2 GUBUN_CODE 2 CLASS 2 GUBUN 3 GUBUN_CODE 3 CLASS 3 GUBUN 4 GUBUN_CODE 4 CLASS 4 GUBUN 5 GUBUN_CODE 5 CLASS 5
5236794 기타 G1 5-A 피아노 P1 5-A 피아노 P1 7-A 트럼펫 T1 2-A 섹소폰 S1 3-A
3456 기타 G1 1-A 피아노 P1 5-A                  


 

by 우리집아찌 [2018.04.06 16:22:29]

5개 max인가요? 

컬럼을 가변적으로 가져가기는 힘듭니다.

다이나믹 쿼리를 사용하시거나

컬럼 갯수를 고정값을 이용해서 사용하시거나

컬럼에 구분자를 넣어서 어플리케이션에서 나눠어서 사용하던가 하셔야합니다.

 


by Taems [2018.04.06 16:25:15]

5개 넘을 수도 있습니다~^^;


by 마농 [2018.04.06 16:46:30]
WITH t AS
(
SELECT 5236794 num_cd, '기타' gubun, 'G1' gubun_code, '5-A' class FROM dual
UNION ALL SELECT 5236794, '피아노', 'P1', '5-A' FROM dual
UNION ALL SELECT 5236794, '피아노', 'P1', '7-A' FROM dual
UNION ALL SELECT 5236794, '트럼펫', 'T1', '2-A' FROM dual
UNION ALL SELECT 5236794, '섹소폰', 'S1', '3-A' FROM dual
UNION ALL SELECT    3456, '기타'  , 'G1', '1-A' FROM dual
UNION ALL SELECT    3456, '피아노', 'P1', '5-A' FROM dual
)
SELECT num_cd
     , MIN(DECODE(rn, 1, gbn)) gbn1
     , MIN(DECODE(rn, 1, cod)) cod1
     , MIN(DECODE(rn, 1, cls)) cls1
     , MIN(DECODE(rn, 2, gbn)) gbn2
     , MIN(DECODE(rn, 2, cod)) cod2
     , MIN(DECODE(rn, 2, cls)) cls2
     , MIN(DECODE(rn, 3, gbn)) gbn3
     , MIN(DECODE(rn, 3, cod)) cod3
     , MIN(DECODE(rn, 3, cls)) cls3
     , MIN(DECODE(rn, 4, gbn)) gbn4
     , MIN(DECODE(rn, 4, cod)) cod4
     , MIN(DECODE(rn, 4, cls)) cls4
     , MIN(DECODE(rn, 5, gbn)) gbn5
     , MIN(DECODE(rn, 5, cod)) cod5
     , MIN(DECODE(rn, 5, cls)) cls5
     , MIN(DECODE(rn, 6, gbn)) gbn6
     , MIN(DECODE(rn, 6, cod)) cod6
     , MIN(DECODE(rn, 6, cls)) cls6
     , MIN(DECODE(rn, 7, gbn)) gbn7
     , MIN(DECODE(rn, 7, cod)) cod7
     , MIN(DECODE(rn, 7, cls)) cls7
  FROM (SELECT num_cd
             , gubun      gbn
             , gubun_code cod
             , class      cls
             , ROW_NUMBER() OVER(PARTITION BY num_cd ORDER BY '정렬기준') rn
          FROM t
        )
 GROUP BY num_cd
;

 


by Taems [2018.04.06 17:04:45]

아.... 정말 감사합니다..... 구글링으로 방법을 찾고 있었는데 이렇게 하는 방법이 있는지 몰랐습니다.

소중하게 잘 활용하도록 하겠습니다~ 

감사합니다~~ 마농님~~~~^^

즐거운 한주 되세요~~


by 우리집아찌 [2018.04.06 17:33:17]

한 컬럼으로 받아서 split 해서 쓰시려면

http://www.gurubee.net/article/55512

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