본문 바로가기
데이터베이스/SQL

SQL Row를 column으로 출력 SUM+DECODE, PIVOT, UNPIVOT

by ADELA_J 2023. 12. 12.

<SUM + DECODE>

- 테이블의 ROW를 column으로 출력하려면 해당 함수를 사용해야함

 

▼ 최종 결과 출력물

 

▶ 일단 SUM을 제외하고 DECODE만 사용해서 부서 번호가 10이면 월급이 출력되게 해봄

 

쿼리를 살펴보면

▷ deptno가 10인 사람의 sal을 "10"이라고 불리는 column에 DECODE를 사용해서 출력해라

(나머지는 NULL이다)

 

▼ 다음 쿼리는 직업, 직업별 토탈 월급을 출력하는데 합쳐서 하나로 출력해보기

▷ 요거는 직업을 다 알고 있으니까 작성된 쿼리이지만 모르면 PL/SQL을 사용해야함.

PL/SQL은 https://velog.io/@bahar-j/PLSQL 참고

 

 

▼ 위에서 한 직업별로 토탈월급 출력하고나서 각 부서 번호별로 직업의 월급 분포를 보기 위해 추가해봄

 

▷ 분포도를 보면 ANALYST는 부서 20에 몰려있고, SALESMAN은 부서 30에 몰려있는 것을 확인할 수 있다.

 

<PIVOT>

- ROW를 column으로 출력하기 위한 또 다른 함수, 네 그 피벗

 

▼ 부서 번호, 부서 번호별 토탈 월급을 Pivot사용해서 출력해보기

 

위에서 했던 sum+DECODE를 이용했던 것보다 좀 더 간단하게 적을 수 있음.

▷ 부서 번호랑 토탈 월급을 출력하기 위해 필요한건 부서 번호랑 월급 뿐이니까

(2)FROM에서 그 2개만 불러왔던 것임.

(3)에서 deptno에서 10,20,30에 대한 것을 출력함

 

▼ 직업별로 나눠서 토탈 월급 출력해보기

▶ Pivot을 사용할 때는 FROM절에 괄호를 사용해서 특정 컬럼을 반드시 선택해줘야함

(다른 때 처럼 FROM emp 하면 에러남)

 

▷ 위에서는 싱글 쿼테이션마크 ( 작은 따옴표, ' ) 가 포함되어있으니 as를 사용하면 좀 더 깔끔하게 됨

 

<UNPIVOT>

- 위에서와 반대로 column을 ROW로 출력

 

▷ 일단 order2 라는 테이블을 만들어주고 values을 넣어줌 (만들어진 테이블)

 

▼ unpivot을 사용해서 컬럼을 로우로 출력해보겠음

▷ UNPIVOT은 pivot이랑 반대로 열을 행으로 출력함.

아이템을 unpivot하라고 했으니까 bicycle과 camera, notebook 총 3개였으니 3개의 열이었지만 

unpivot으로 인해 행으로 출력되어 총 9개(이름 3명 * 아이템 3개) 로 '건수' 로 출력됨

▷ '건수'랑 '아이템'은 임의로 지정가능함(다른이름으로도)

 

물론 위에서 했던 것 처럼 값도 AS절을 사용해 변경 가능 

 

▶ 만약 NULL이 포함되어있다면 unpivot 한 결과에서 출력이 되지 않음. 

▷ 일단 NOTEBOOK을 NULL로 변경하고 다시 unpivot 해보겠음

 

▶ ▶ 원래 9개 행이 출력됐는데 8개 행밖에 나오지 않았음. NULL값이 제외됐기 때문에

▷ 만약 NULL도 나오고자한다면 INCLUDE NULLS를 사용

▶ 빈칸, NULL이 같이 출력되는 것을 확인할 수 있음.