세로의 데이터를 가로 형식으로 전환하는 쿼리 질문. 0 4 4,499

by 아리수 [SQL Query] query oracle 9i row column [2018.07.19 16:42:35]


안녕하세요. 

쿼리를 어떻게 짜야할 지 몰라 질문 드립니다. 

다음과 같은 데이터가 있습니다. 

 

이름 줄번호 순서 ㅋ코드 ㄱ길이 ㄴ날짜
AAA 1 1 4567 8900 20180718131314
AAA 1 2 4567 8900 20180718131314
AAA 1 3 4567 8900 20180718131314
AAA 1 4 4567 8900 20180718131314
AAA 1 5 4567 8900 20180718131314
AAA 1 6 4567 8900 20180718131314
AAA 2 1 4567 8900 20180718131314
AAA 2 2 4567 8900 20180718131314
AAA 2 3 4567 8900 20180718131314
AAA 2 4 4567 8900 20180718131314
AAA 2 5 4567 8900 20180718131314
AAA 3 1 4567 8900 20180718131314
AAA 3 2 4567 8900 20180718131314
AAA 3 3 4567 8900 20180718131314

이런 데이터를 

이름 ㅅ순서 ㅈ줄번호1 ㅈ줄번호1 ㅈ줄번호1 ㅈ줄번호2 ㅈ줄번호2 ㅈ줄번호2 ㅈ줄번호3 ㅈ줄번호3 ㅈ줄번호3
이름 ㅅ순서 ㅋ코드 ㄱ길이 ㄴ날짜 ㅋ코드 ㄱ길이 ㄴ날짜 ㅋ코드 ㄱ길이 ㄴ날짜
AAA 1 4567 8900 20180718131314 4567 8900 20180718131314 4567 8900 20180718131314
AAA 2 4567 8900 20180718131314 4567 8900 20180718131314 4567 8900 20180718131314
AAA 3 4567 8900 20180718131314 4567 8900 20180718131314 4567 8900 20180718131314
AAA 4 4567 8900 20180718131314 4567 8900 20180718131314      
AAA 5 4567 8900 20180718131314 4567 8900 20180718131314      
AAA 6 4567 8900 20180718131314            

이런식으로 데이터를 가져오려고 합니다. 

쿼리를 어떻게 구성해야 하는지요? 

표기능에서 병합이 없어 같은 이름을 반복으로 표시하였습니다. 

오라클 버전은 9i 입니다.

by 우리집아찌 [2018.07.19 18:03:24]
WITH T AS (
SELECT 'AAA' NM ,1 LINE_NO ,1 SEQ ,4567 CODE ,8900 LEN ,'20180718131315' DT FROM DUAL UNION ALL
SELECT 'AAA',1,2,4567,8900,'20180718131317' FROM DUAL UNION ALL
SELECT 'AAA',1,3,4567,8900,'20180718131318' FROM DUAL UNION ALL
SELECT 'AAA',1,4,4567,8900,'20180718131319' FROM DUAL UNION ALL
SELECT 'AAA',1,5,4567,8900,'20180718131320' FROM DUAL UNION ALL
SELECT 'AAA',1,6,4567,8900,'20180718131321' FROM DUAL UNION ALL
SELECT 'AAA',2,1,4567,8900,'20180718131322' FROM DUAL UNION ALL
SELECT 'AAA',2,2,4567,8900,'20180718131323' FROM DUAL UNION ALL
SELECT 'AAA',2,3,4567,8900,'20180718131324' FROM DUAL UNION ALL
SELECT 'AAA',2,4,4567,8900,'20180718131325' FROM DUAL UNION ALL
SELECT 'AAA',2,5,4567,8900,'20180718131326' FROM DUAL UNION ALL
SELECT 'AAA',3,1,4567,8900,'20180718131327' FROM DUAL UNION ALL
SELECT 'AAA',3,2,4567,8900,'20180718131328' FROM DUAL UNION ALL
SELECT 'AAA',3,3,4567,8900,'20180718131329' FROM DUAL 
)

SELECT NM       "이름"
     , SEQ      "순서"
     , MAX(CASE WHEN RN = 1 THEN CODE END ) CODE_1
     , MAX(CASE WHEN RN = 1 THEN LEN END )  LEN_1
     , MAX(CASE WHEN RN = 1 THEN DT END )   DT_1
     , MAX(CASE WHEN RN = 2 THEN CODE END ) CODE_2
     , MAX(CASE WHEN RN = 2 THEN LEN END )  LEN_2
     , MAX(CASE WHEN RN = 2 THEN DT END )   DT_2
     , MAX(CASE WHEN RN = 3 THEN CODE END ) CODE_3
     , MAX(CASE WHEN RN = 3 THEN LEN END )  LEN_3
     , MAX(CASE WHEN RN = 3 THEN DT END )   DT_3     
  FROM (SELECT T.NM , T.LINE_NO , T.SEQ , T.CODE , T.LEN , T.DT 
             , ROW_NUMBER() OVER(PARTITION BY T.NM  , T.SEQ ORDER BY LINE_NO ) RN 
          FROM T 
       )
  GROUP BY NM , SEQ
  ORDER BY NM , SEQ
  
  

 


by 아리수 [2018.07.20 08:42:51]

감사합니다. 

 


by 마농 [2018.07.23 07:52:15]
SELECT *
  FROM t
 PIVOT (MIN(code) code, MIN(len) len, MIN(dt) dt FOR line_no IN (1, 2, 3))
 ORDER BY nm, seq
;

 


by 아리수 [2018.08.05 16:02:50]

9i에서는 PIVOT함수를 사용할 수 없군요.

감사합니다.

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