티스토리 뷰
PIVOT and UNPIVOT in SQL Server
T-SQL 에서 집계처리할 때 많이 사용된다.
이런 기능이 없었을땐 CASE 문으로 처리를 했었는데 아주 편한 기능이다.
요즘은 스크립트를 만들지 않아서 자주 까먹기에 스크랩을 해보자.
use tempdb
go
-- PIVOT
create table #sales (country_name varchar(100),product_name varchar(100),
sales_date datetime, sales_amount decimal(12,2))
insert into #sales (country_name,product_name,sales_date,sales_amount)
select 'India','Television','2012-01-10',35000 union all
select 'India','Mobile','2012-12-19',22000 union all
select 'India','Laptop','2012-04-11',62500 union all
select 'India','Laptop','2013-06-23',45000 union all
select 'India','Television','2012-03-20',45000 union all
select 'India','Television','2013-05-30',56000 union all
select 'India','Mobile','2013-02-22',71200 union all
select 'USA','Television','2012-02-20',3500 union all
select 'USA','Mobile','2012-11-01',2700 union all
select 'USA','Laptop','2012-08-19',6500 union all
select 'USA','Laptop','2013-06-23',5000 union all
select 'USA','Television','2012-02-12',4560 union all
select 'USA','Television','2013-06-30',5100 union all
select 'USA','Mobile','2013-006-06',2200
select * from #sales
SELECT product_name,[2012],[2013] from
(select year(sales_date) as sales_year,product_name,sales_amount FROM #sales)
as t
PIVOT(SUM(sales_amount) FOR sales_year IN ([2012],[2013])) AS pivot_table
결과를 보면 SELECT 절의 product_name으로 group by 를 하는데 해당 하는 값은 SUM(sales_amount) 이다.
비슷하지만 열을 추가하면 아래와 같이 된다.
SELECT country_name,product_name,[2012],[2013],[2014] from
(select year(sales_date) as sales_year, country_name, product_name,
sales_amount FROM #sales)
as t
PIVOT(SUM(sales_amount)
FOR sales_year IN ([2012],[2013],[2014])) AS pivot_table
-- UNPIVOT
create table #marks(student_name varchar(100), English smallint,
Mathematics smallint, Tamil smallint, Science smallint)
insert into #marks(student_name , English, Mathematics, Tamil, Science)
select 'Sankar', 78,91,79,60 union all
select 'Nilesh', 81,90,66,89 union all
select 'Murugan', 94,88,72,90
select * from #marks
select student_name, subject_name, mark
from #marks s
unpivot
(
mark
for subject_name in (English, Mathematics, Tamil, Science)
) t;
결론. 언제쓰냐이다. 컬럼명을 실제 행값으로 표현하고 싶을 때, 아니면 반대로 출력하고 싶을 때 사용하면 최고다.
[참고문서]
PIVOT and UNPIVOT in SQL Server
http://www.sqlservercurry.com/2016/04/pivot-unpivot-tables-sql-server.html
'SQL Server' 카테고리의 다른 글
SQL클러스터의 SQL Server Integration Service 시작계정 관련 (0) | 2016.04.19 |
---|---|
SQL Server 백업 옵션(BUFFERCOUNT, MAXTRANSFERSIZE)에 따른 성능 (0) | 2016.04.18 |
SQL Server tempdb 손상시 Trace Flag 3609 사용하기 (0) | 2016.04.12 |
SQL Server Configuration Manager(구성관리자) 시작 실패사례 2 (0) | 2016.04.12 |
SQL Server Configuration Manager(구성관리자) 시작 실패사례 1 (0) | 2016.04.12 |
- Total
- Today
- Yesterday