PIVOT 질문드립니다. 0 3 718

by 날자~! [2022.01.19 18:36:24]


아래 DATA SET을 하나의 행으로 만들고 싶습니다.

쿼리 좀 부탁드립니다.

 

WITH DATA
 AS (
 SELECT '2001' YEAR, 'A' CATEGORY, '1' MONTH1, '3' MONTH2, '5' MONTH3 FROM DUAL
 UNION ALL
 SELECT '2001' YEAR, 'B' CATEGORY, '2' MONTH1, '4' MONTH2, '6' MONTH3 FROM DUAL
 UNION ALL
 SELECT '2002' YEAR, 'A' CATEGORY, '7' MONTH1, '9' MONTH2, '11' MONTH3 FROM DUAL
 UNION ALL
 SELECT '2002' YEAR, 'B' CATEGORY, '8' MONTH1, '10' MONTH2, '12' MONTH3 FROM DUAL
 )
 SELECT * FROM DATA

 

해당 데이터셋을

아래처럼 하나의 행으로 만들고 싶습니다.

SELECT '2001' YEAR, 'A' CATEGORY, '1' MONTH1, '3' MONTH2, '5' MONTH3
      , '2001' YEAR, 'B' CATEGORY, '2' MONTH1, '4' MONTH2, '6' MONTH3
      , '2002' YEAR, 'A' CATEGORY, '7' MONTH1, '9' MONTH2, '11' MONTH3
      , '2002' YEAR, 'B' CATEGORY, '8' MONTH1, '10' MONTH2, '12' MONTH3
 FROM DUAL

 

 

 

 

by 마농 [2022.01.19 20:16:31]

앞선 질문과 연결되는 건가요?
원본이 앞선 질문의 결과물이네요?
중간 결과물을 다시 가공하여 최종결과물을 뽑는것 보다는
애초에 원본 테이블 데이터로부터 중관과정을 거치지 않고 직접 최종결과물을 뽑는게 좋습니다.
최초의 원본 데이터를 보여주세요.


by 마농 [2022.01.19 20:33:45]
SELECT *
  FROM (SELECT year, category, month1, month2, month3
             , ROW_NUMBER() OVER(ORDER BY year, category) rn
          FROM data
        )
 PIVOT ( MIN(year) year
       , MIN(category) category
       , MIN(month1) month1
       , MIN(month2) month2
       , MIN(month3) month3
       FOR rn IN (1, 2, 3, 4)
       )
;

 


by 날자~! [2022.01.21 08:11:41]

이전 질문과 연결된 부분이 맞습니다.

이전 질문결과도 보여줘야 되고

본 질문결과도 보여줘야 되서 질문드렸었습니다.

(원본 데이터는 이전 질문에서 드렸던 DATA WITH 절입니다)

 

감사합니다!

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