안녕하세요. 오라클을 사용하고 있습니다.
아래와 같이 쿼리결과에 대해 열과 행을 변환하여 표시하고자 합니다.
관련 Q&A를 검색해봤는데 그래도 잘 이해가 안되네요.
관련하여 도움을 주시면 감사하겠습니다.
SELECT 'A' AS GUBUN, 100 AS PLAN, 90 AS RECORD FROM DUAL
UNION ALL
SELECT 'B' AS GUBUN, 200 AS PLAN, 150 AS RECORD FROM DUAL
UNION ALL
SELECT 'C' AS GUBUN, 150 AS PLAN, 140 AS RECORD FROM DUAL
결과
GUBUN PLAN RECORD
A 100 90
B 200 150
C 150 140
위의 결과를 아래와 같이 변환
GUBUN A B C
PLAN 100 200 150
RECORD 90 150 140
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | with tmp as ( select 'A' gubun, 100 plan, 90 record from dual union all select 'B' gubun, 200 plan, 150 record from dual union all select 'C' gubun, 150 plan, 140 record from dual) select 'PLAN' AS "GUBUN" , A, B, C from ( select gubun, plan from tmp) pivot ( max (plan) for gubun in ( 'A' AS A, 'B' AS B, 'C' AS C) ) union all select 'RECORD' , A, B, C from ( select gubun, record from tmp) pivot ( max (record) for gubun in ( 'A' AS A, 'B' AS B, 'C' AS C) ) ; |
감사합니다.
답변주신 내용 많이 참고가 되었습니다.
번거로우시겠지만 추가로 질의를 드리면 행으로 변환해야할 항목들이 많아서 위 쿼리로 하기엔 하드코딩이 너무 많아 질것같아 아래와 같이 쿼리를 좀 변경하였습니다.
----------------------------------------------------------------------------------------
WITH T AS
(
SELECT 'A' GUBUN, 100 PLAN, 90 RECORD, 10 RATE FROM DUAL UNION ALL
SELECT 'B' GUBUN, 200 PLAN, 150 RECORD, 40 RATE FROM DUAL UNION ALL
SELECT 'C' GUBUN, 150 PLAN, 140 RECORD, 5 RATE FROM DUAL
)
SELECT *
FROM T
UNPIVOT (VALUE FOR COL IN (PLAN, RECORD, RATE))
PIVOT (MIN(VALUE) FOR GUBUN IN ('A', 'B', 'C'))
----------------------------------------------------------------------------------------
여기에서 해결되지 않는 부분은 행의 순서가 위의 UNPIVIOT IN 구문에 기재된 순서대로 표현되고
싶은데 이에 대한 정렬이 위 쿼리의 결과는
RECORD
RATE
PLAN 순으로 나옵니다.
이를 IN 구문에 표시한 순서대로 아래오 같은 결과가 표현될수 있는 방법은 없을까요..
PLAN
RECORD
RATE