1 minute read

Updated:

row를 column으로 출력하기 1 (sum + decode)

예제1) 부서번호와 부서번호별 토탈 월급을 출력하는데 다음과 같이 가로로 출력하시오.

select sum(decode(deptno, 10, sal, null)) as "10",
sum(decode(deptno, 20, sal, null)) as "20",
sum(decode(deptno, 30, sal, null)) as "30"
from emp;
  • 그룹함수는 null을 연산에서 제외하기 때문에 연산 효율이 더 좋은 편이다.

예제2) 직업, 직업별 토탈월급을 가로로 출력하세요.

select sum(decode(job, 'PRESIDENT', sal)) as PRESIDENT,
sum(decode(job, 'MANAGER', sal)) as MANAGER,
sum(decode(job, 'SALESMAN', sal)) as SALESMAN,
sum(decode(job, 'CLERK', sal)) as CLERK,
sum(decode(job, 'ANALYST', sal)) as ANALYST
from emp;

row를 column으로 출력하기(PIVOT)

예제1) 부서번호와 부서번호별 토탈 월급을 출력하는데 다음과 같이 가로로 출력하세요

  • 작성법 : pivot(그룹함수 for 기준 컬럼 in (데이터 1, 데이터 2, …))
  • in line view (from절 서브쿼리) : 쿼리문이 가장 처음 실행되는 from절에 새로운 쿼리를 작성하는 방식
select * 
from (select deptno, sal from emp)
pivot (sum(sal) for deptno in (10, 20, 30));

예제2) 직업과 직업별 토탈 월급을 출력하는데 다음과 같이 가로로 출력하세요.

select * 
from (select job, sal from emp)
pivot (sum(sal) for job in ('MANAGER' as "MANAGER", 'SALESMAN' as "SALESMAN", 'ANALYST' as "ANALYST", 'PRESIDENT' as "PRESIDENT", 'CLERK' as "CLERK"));
  • ~ as “컬럼명”을 쓰면, ‘’(작은따옴표)가 붙지 않는다.

column을 row로 출력하기(UNPIVOT)

  • 작성법 : unpivot(출력할 컬럼이름 for 데이터가 출력될 컬럼이름 in (데이터1, 데이터2, …))
select * from order2
unpivot (건수 for 아이템 in (BICYCLE, CAMERA, NOTEBOOK));

예제) 범죄원인 테이블을 생성하고 방화사건의 가장 큰 원인이 무엇인지 출력하세요.

SELECT * FROM crime_cause
unpivot (건수 for 범죄원인 in (생계형, 유흥, 도박, 허영심, 복수, 해고, 징벌, 가정불화, 호기심, 유혹, 사고, 불만, 부주의, 기타))
where crime_type='방화'
order by 건수 desc;