ROLLUP, PIVOT, UNPIVOT

Hyuntae Jung·2022년 7월 24일
0

MS SQL

목록 보기
11/41
post-thumbnail

1. ROLLUP

SELECT deptNo, SUM(salary) AS '급여 총액'
FROM employee
GROUP BY deptNo;

SELECT deptNo, job, SUM(salary) AS '급여 총액'
  FROM employee
GROUP BY deptNo, job
ORDER BY deptNo;

SELECT deptNo, job, SUM(salary) AS '급여 총액'
  FROM employee
GROUP BY deptNo, job WITH ROLLUP;

위와 같이 부서별 급여 총액이 추출된다.

2. CUBE

: ROLLUP 함수의 확장된 형태의 정보를 조회할 수 있는 함수이다.

SELECT deptNo, job,   SUM(salary) AS '급여 총액'
  FROM employee
GROUP BY deptNo,job WITH CUBE;

3. CASE

: 프로그래밍언어(C, JAVA등)의 switch()문과 같은 기능의 함수이다.(여러가지 경우에 대해서 하나를 선택하는 함수)
다양한 비교 연산자를 이용하여 조건을 제시할 수 있고, 범위를 지정할 수 있다.

CASE WHEN 조건1 THEN 결과1
	WHEN 조건2 THEN 결과2 
	WHEN 조건3 THEN 결과3 
	WHEN 조건4 THEN 결과4
	ELSE 결과N
END
SELECT empName, deptNo,
	CASE WHEN deptNo = 10 THEN '경리부'
		WHEN deptNo = 20 THEN '인사부'
		WHEN deptNo = 30 THEN '영업부'
		WHEN deptNo = 40 THEN '전산부'
	END AS deptName
FROM employee;

4. PIVOT, UNPIVOT

: 일정한 형식의 데이터를 자신이 원하는 형태로 재구축할 때 사용하는 함수

SELECT 칼럼명, '열로 변환시킬 행'
  FROM 테이블명
PIVOT(집계함수(검색할 열))
FOR 크로스탭의 기준이 되는 열
IN ([변환시킬 행) AS [가명]

행집합을 열로 변환해서 출력한다.

4.1. PIVOT 샘플 데이터 생성

CREATE TABLE test(
	year int,
	q int,
	amount DECIMAL(2, 1)
	);



INSERT test VALUES(2009, 1, 3.2)
INSERT test VALUES(2009, 2, 3.3)
INSERT test VALUES(2009, 3, 3.4)
INSERT test VALUES(2009, 4, 3.5)

INSERT test VALUES(2010, 1, 4.2)
INSERT test VALUES(2010, 2, 4.3)
INSERT test VALUES(2010, 3, 4.4)
INSERT test VALUES(2010, 4, 4.5)

INSERT test VALUES(2011, 1, 5.2)
INSERT test VALUES(2011, 2, 5.3)
INSERT test VALUES(2011, 3, 5.4)
INSERT test VALUES(2011, 4, 5.5)

4.2. PIVOT

SELECT *
FROM test;


SELECT year, [1], [2], [3], [4]
  FROM test
PIVOT(SUM(amount)
    FOR q
	IN([1], [2], [3], [4])) AS p

4.3. UNPIVOT 샘플데이터 생성

CREATE TABLE test2(
	year int,
	Q1 decimal(2, 1),
	Q2 decimal(2, 1),
	Q3 decimal(2, 1),	
	Q4 decimal(2, 1),
	);

INSERT INTO test2 VALUES(2010, 1.1, 1.2, 1.3, 1.4);
INSERT INTO test2 VALUES(2011, 2.1, 2.2, 2.3, 2.4);

SELECT * 
  FROM test2;

4.4. UNPIVOT

: PIVOT과 반대로 열을 행의 집합으로 보여주고자 할 때 사용한다.

SELECT year, quarter, amount
  FROM test2
UNPIVOT(amount 
	FOR quarter IN([Q1], [Q2], [Q3], [Q4])) AS unp; 

강의: ms sql 2014 제대로 배우기 1

0개의 댓글