SQL Server PIVOT : ms sql server Row Column Pivot 로우 컬럼변환 

 

Summary: in this tutorial, you will learn how to use the SQL Server PIVOT operator to convert rows to columns.

Setting up the goals

For the demonstration, we will use the production.products and production.categories tables from the sample database:

The following query finds the number of products for each product category:

 

SELECT category_name, COUNT(product_id) product_count FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id GROUP BY category_name;

Here is the output:

Our goal is to turn the category names from the first column of the output into multiple columns and count the number of products for each category name as the following picture:

In addition, we can add the model year to group the category by model year as shown in the following output:

Introduction to SQL Server PIVOT operator

SQL Server PIVOT operator rotates a table-valued expression. It turns the unique values in one column into multiple columns in the output and performs aggregations on any remaining column values.

You follow these steps to make a query a pivot table:

  • First, select a base dataset for pivoting.
  • Second, create a temporary result by using a derived table or common table expression (CTE)
  • Third, apply the PIVOT operator.

Let’s apply these steps in the following example.

First, select category name and product id from the production.products and production.categories tables as the base data for pivoting:

 

SELECT category_name, product_id FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id

Second, create a temporary result set using a derived table:

 

SELECT * FROM ( SELECT category_name, product_id FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id ) t

Third, apply the PIVOT operator:

 

SELECT * FROM ( SELECT category_name, product_id FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id ) t PIVOT( COUNT(product_id) FOR category_name IN ( [Children Bicycles], [Comfort Bicycles], [Cruisers Bicycles], [Cyclocross Bicycles], [Electric Bikes], [Mountain Bikes], [Road Bikes]) ) AS pivot_table;

This query generates the following output:

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

Now, any additional column which you add to the select list of the query that returns the base data will automatically form row groups in the pivot table. For example, you can add the model year column to the above query:

 

SELECT * FROM ( SELECT category_name, product_id, model_year FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id ) t PIVOT( COUNT(product_id) FOR category_name IN ( [Children Bicycles], [Comfort Bicycles], [Cruisers Bicycles], [Cyclocross Bicycles], [Electric Bikes], [Mountain Bikes], [Road Bikes]) ) AS pivot_table;

Here is the output:

Generating column values

In the above query, you had to type each category name in the parentheses after the IN operator manually. To avoid this, you can use the QUOTENAME() function to generate the category name list and copy them over the query.

First, generate the category name list:

 

DECLARE @columns NVARCHAR(MAX) = ''; SELECT @columns += QUOTENAME(category_name) + ',' FROM production.categories ORDER BY category_name; SET @columns = LEFT(@columns, LEN(@columns) - 1); PRINT @columns;

The output will look like this:

[Children Bicycles],[Comfort Bicycles],[Cruisers Bicycles],[Cyclocross Bicycles],[Electric Bikes],[Mountain Bikes],[Road Bikes]

In this snippet:

  • The QUOTENAME() function wraps the category name by the square brackets e.g., [Children Bicycles]
  • The LEFT() function removes the last comma from the @columns string.

Second, copy the category name list from the output and paste it to the query.

Dynamic pivot tables

If you add a new category name to the production.categories table, you need to rewrite your query, which is not ideal. To avoid doing this, you can use dynamic SQL to make the pivot table dynamic.

In this query, instead of passing a fixed list of category names to the PIVOT operator, we construct the category name list and pass it to an SQL statement, and then execute this statement dynamically using the stored procedure sp_executesql.

 

DECLARE @columns NVARCHAR(MAX) = '', @sql NVARCHAR(MAX) = ''; -- select the category names SELECT @columns+=QUOTENAME(category_name) + ',' FROM production.categories ORDER BY category_name; -- remove the last comma SET @columns = LEFT(@columns, LEN(@columns) - 1); -- construct dynamic SQL SET @sql =' SELECT * FROM ( SELECT category_name, model_year, product_id FROM production.products p INNER JOIN production.categories c ON c.category_id = p.category_id ) t PIVOT( COUNT(product_id) FOR category_name IN ('+ @columns +') ) AS pivot_table;'; -- execute the dynamic SQL EXECUTE sp_executesql @sql;

In this tutorial, you have learned how to use the SQL Server PIVOT table to convert rows to columns.

 

[출처] https://www.sqlservertutorial.net/sql-server-basics/sql-server-pivot/

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86756
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79073
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95836
72 [R library] library(XML) # install.packages("XML") 인스톨 에러 졸리운_곰 2023.05.06 1180
71 [R 데이터 분석] Titanic: Machine Learning from Disaster (타이타닉 생존 예측) file 졸리운_곰 2023.04.29 1183
70 [R 데이터 분석] R 유명한 패키지 정리 졸리운_곰 2023.04.24 1916
69 [R 데이터 분석] Shiny : 대시보드 배포하기 file 졸리운_곰 2023.03.19 1417
68 [stat(통계) R 언어] 유명하고 많이 사용하는 R 패키지 정리 졸리운_곰 2022.04.19 1301
67 [R 데이터 분석] anaconda에서 R 사용하기 file 졸리운_곰 2022.01.16 1311
66 [R 데이터 분석] Using C/C++ in R , R언어에서 C/C++ 사용하기 졸리운_곰 2021.11.21 1654
65 [데이터 통계분석 R언어] Shiny 웹앱 개발 졸리운_곰 2021.02.14 1389
64 How to Deploy Interactive R Apps with Shiny Server file 졸리운_곰 2021.02.13 1218
63 [통계, 데이터분석 언어 R] R Shiny Server를 사용해 보자. 졸리운_곰 2021.02.13 1420
62 통계분석툴 R & MongoDB 연동 방법 file 졸리운_곰 2020.12.12 1828
61 Reading OECD.Stat into R file 졸리운_곰 2019.04.04 1871
60 Scrape OECD Data by R lang : R언어로 OECD.net 데이터 가져오기 졸리운_곰 2019.04.04 1490
59 윈도우에서 통계 분석 프로그램 R Project 활용 방안 file 졸리운_곰 2018.12.24 1703
58 C#과 R을 연동하기 file 졸리운_곰 2018.12.24 1563
57 Use R in C# : C#에서 R 사용 졸리운_곰 2018.12.24 1550
56 R 언어_ 범주형 자료(factor) 함수 사용 file 졸리운_곰 2018.12.22 1668
55 R - 도수분포표/교차표, table( )함수 file 졸리운_곰 2018.12.22 1430
54 주피터 노트북에 R 커널 설치하기 + 아나콘다 설치 file 졸리운_곰 2018.12.21 2320
53 R기초입문_r_book_mac_v3.pdf file 졸리운_곰 2018.12.20 1595
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED