Oracle DBA/SQL

20230628 (7) SQL 049 : COLUMN을 ROW 로 출력하기(UNPIVOT)

Nuez 2023. 6. 28. 16:59
반응형

1. 행(row) -> 컬럼(column) : sum + decode 또는 pivot문

2. 컬럼(column) -> 행(row) : unpivot문

 

unpivot문이 필요한 이유 :

- 데이터 분석을 위해서 데이터를 구하다 보면, raw데이터는 구하기 어렵고 이미 raw데이터를 가지고 분석한 결과 테이블을 구할 수 있는 경우가 있음.

- 공공 데이터 포털에 올려진 데이터를 보면 주로 이미 pivoting된 결과 데이터를 구할 수 있는 경우가 많음. 내가 원하는 데이터는 pivoting 전 raw데이터.

 

-> UNPIVOT을 통해 원하는 형태로 만들어주고, 테이블로 생성하면 됨. 

 

구조:

SELECT *
FROM 대상 테이블
UNPIVOT ( 컬럼별칭(값) FOR 컬럼별칭(열) IN (테이블 열명 나열)

 

컬럼별칭부분은 한글로 임의로 지정해줘도 됨. 

IN 다음 괄호 안에 컬럼명 양쪽에 '' 쓰지 않음. 


1. UNPIVOT문을 위한 테이블 준비 
 

DROP TABLE order2;

CREATE TABLE order2
		(ename VARCHAR2(10),
		bicycle NUMBER(10),
		camera NUMBER(10),
		notebook NUMBER(10) );
INSERT INTO order2 VALUES ('SMITH', 2, 3, 1);
INSERT INTO order2 VALUES ('ALLEN', 1, 2, 3);
INSERT INTO order2 VALUES ('KING', 3, 2, 2);

COMMIT;
SELECT * FROM order2;


2. UNPIVOT 작업

SELECT * 
FROM order2
UNPIVOT ( 갯수 for 아이템 in (bicycle, camera, notebook));

 


3. UNPIVOT한 테이블 생성 

DROP TABLE item2

CREATE TABLE item2
AS 
SELECT * 
FROM order2
UNPIVOT(갯수 FOR 아이템 IN (bicycle, camera, notebook));

COMMIT;
SELECT * FROM item2;


4. 원하는 SQL 문 작성

문제 248. item2에서 아이템, 아이템별 갯수2의 토탈값을 출력하시오.

SELECT 아이템, SUM(갯수)
FROM item2
GROUP BY 아이템;