728x90
반응형
오라클 행열 바꾸기 

 

오늘은 행으로 나열된 데이터를 열로 변환하는 내용을 포스팅 하겠어요  

쿼리를 짜다 보면 행으로 나열된 테이블만으로 항목별 정보를 조회해야 하는 일들이 발생하는데요

행을 열로 변환 할때는 CASE WHEN, MAX 함수를 사용하여 변환이 가능합니다.

 

CASE WHEN 구문 사용법을 모르시면 여기를 참고 하시구요 

 

 

자 그럼 행열을 변환하는 쿼리에 대한 포스팅을 시작해 볼까요  

 

 

WITH TDATA AS

(

SELECT 3 AS 판매량, '미국' 국적, '핸드폰' AS 판매제품 FROM DUAL

UNION ALL

SELECT 15 AS 판매량, '한국' 국적, '냉장고' AS 판매제품 FROM DUAL

UNION ALL

SELECT 8 AS 판매량, '대만' 국적, '핸드폰' AS 판매제품 FROM DUAL

UNION ALL

SELECT 5 AS 판매량, '한국' 국적, '자동차' AS 판매제품 FROM DUAL

UNION ALL

SELECT 42 AS 판매량, '한국' 국적, '핸드폰' AS 판매제품 FROM DUAL

UNION ALL

SELECT 24 AS 판매량, '미국' 국적, '냉장고' AS 판매제품 FROM DUAL

UNION ALL

SELECT 24 AS 판매량, '미국' 국적, '카메라' AS 판매제품 FROM DUAL

)

SELECT * FROM TDATA;

 

 

1. 테스트를위해 WITH문을사용하여 TDATA 라는데이터를만들어서조회한결과입니다.  

이데이터를이용하여 행열 변환 쿼리를 적용해 보도록 하겠습니다.

  

 

 

SELECT

국적

,CASE WHEN 판매제품='핸드폰' THEN SUM(판매량) ELSE 0 END 핸드폰

,CASE WHEN 판매제품='냉장고' THEN SUM(판매량) ELSE 0 END 냉장고

,CASE WHEN 판매제품='자동차' THEN SUM(판매량) ELSE 0 END 자동차

,CASE WHEN 판매제품='카메라' THEN SUM(판매량) ELSE 0 END 카메라

FROM TDATA

GROUP BY 국적,판매제품

ORDER BY 국적;

 

 

2. CASE WHEN 문을 사용하여 판매제품 컬럼을 만들었고 국적별, 판매제품별 판매량을 구해봤어요  

그런데 국적별로 ROW 여러 개씩 있네요. 국적이 한국인 ROW 3개나 았네요.

중복되는 ROW들을 하나로 ROW 합쳐야 겠지요

  

 

 

SELECT

국적

,MAX(핸드폰) AS 핸드폰

,MAX(냉장고) AS 냉장고

,MAX(자동차) AS 자동차

,MAX(카메라) AS 카메라

FROM

(

SELECT

국적

,CASE WHEN 판매제품='핸드폰' THEN SUM(판매량) ELSE 0 END 핸드폰

,CASE WHEN 판매제품='냉장고' THEN SUM(판매량) ELSE 0 END 냉장고

,CASE WHEN 판매제품='자동차' THEN SUM(판매량) ELSE 0 END 자동차

,CASE WHEN 판매제품='카메라' THEN SUM(판매량) ELSE 0 END 카메라

FROM TDATA

GROUP BY 국적,판매제품

ORDER BY 국적

)

GROUP BY 국적;

 

3. 위의 결과에서 국적별로 GROUP BY를 다시 해주고 판매제품 컬럼별로 MAX값을 읽어 컬럼을 만드니  

이렇게 행열 변환이 완성되였네요 

 

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,