관계형 막대한 양의 데이터를 테이블 형태로 저장합니다. 이러한 테이블에는 여러 행과 열이있을 수 있습니다. 그러나 행 수준 데이터를 열 데이터로 변경해야한다면 어떨까요? SQL Pivot에 대한이 기사에서는 SQL Server에서 행을 열로 변환하는 방법을 보여 드리겠습니다.
이 기사에서는 다음 주제를 다룹니다.
SQL의 PIVOT은 무엇입니까?
PIVOT은 단일 열의 고유 값을 여러 열로 변환하여 테이블 값을 회전하는 데 사용됩니다. 행을 열 값으로 회전하고 필요한 경우 나머지 열 값에 대해 집계를 실행하는 데 사용됩니다.
반면 UNPIVOT은 반대 작업을 수행하는 데 사용됩니다. 따라서 특정 테이블의 열을 열 값으로 변환하는 데 사용됩니다.
이 기사에서는 SQL Pivot의 구문을 이해하겠습니다.
통사론:
SELECT NonPivoted ColumnName, [First Pivoted ColumnName] AS ColumnName, [Second Pivoted ColumnName] AS ColumnName, [Third Pivoted ColumnName] AS ColumnName, ... [Last Pivoted ColumnName] AS ColumnName FROM (데이터를 생성하는 SELECT 쿼리) AS [alias 초기 쿼리의 경우] PIVOT ([AggregationFunction] (ColumName) FOR [값이 열 머리글이 될 열의 열 이름] IN ([첫 번째 피벗 된 열 이름], [두 번째 피벗 된 열 이름], [세 번째 피벗 된 열 이름] ... [마지막 피벗 열])) AS [피벗 테이블 별칭]
여기,당신은 또한 사용할 수 있습니다 ORDER BY 절 오름차순 또는 내림차순으로 값을 정렬합니다. 이제 SQL의 PIVOT과 기본 구문이 무엇인지 알았으므로 앞으로 나아가서 사용 방법을 살펴 보겠습니다.
예
이해를 돕기 위해 모든 예를 설명하기 위해 다음 표를 고려할 것입니다.
공급 업체 테이블 :
SupplierID | 제조일 | 비용 | 고객 ID | PurchaseID |
하나 | 12 | 1230 년 | 열한 | P1 |
2 | 이십 일 | 1543 년 | 22 | P2 |
삼 | 32 | 2. 3. 4. 5 | 열한 | P3 |
4 | 14 | 8765 | 22 | P1 |
5 | 42 | 3452 | 33 | P3 |
6 | 31 | 5431 | 33 | P1 |
7 | 41 | 2342 | 열한 | P2 |
8 | 54 | 3654 | 22 | P2 |
9 | 33 | 1234 | 열한 | P3 |
10 | 56 | 6832 | 33 | P2 |
각 고객이 지출 한 평균 비용을 검색하는 간단한 쿼리를 작성해 보겠습니다.
CustomerID를 기준으로 공급자 그룹에서 CustomerID, AVG (Cost)를 AverageCostofCustomer로 선택합니다.
산출:
고객 ID | AverageCostofCustomer |
열한 | 1787.75 |
22 | 4654 |
33 | 5238.33 |
이제 위의 테이블을 피벗한다고 가정하겠습니다. 여기서 CustomerID 열 값은 열 머리글이됩니다.
-1 개의 행과 3 개의 열이있는 피벗 테이블 생성 SELECT 'AverageCostofCustomer'AS Cost_According_To_Customers, [11], [22], [33] FROM (SELECT CustomerID, Cost FROM Suppliers) AS SourceTable PIVOT (AVG (Cost) FOR CustomerID IN ( [11], [22], [33])) AS 피벗 테이블
산출:
Cost_According_To_Customers | 열한 | 22 | 33 |
AverageCostofCustomer | 1787.75 | 4654 | 5238.33 |
노트 : 사용할 때 집계 함수 PIVOT을 사용하면 집계를 계산하는 동안 null 값이 고려되지 않습니다.
글쎄, 그것은 기본적인 예 였지만 이제 PIVOT 절이 어떻게 작동하는지 이해합시다.
PIVOT 절의 작동
위에서 참조 할 수 있듯이 PIVOT TABLE을 생성하려면 다음 단계를 따라야합니다.
- 피벗 할 열 선택
- 그런 다음 소스 테이블을 선택하십시오.
- PIVOT 연산자를 적용한 다음 집계 함수를 사용합니다.
- 피벗 값을 언급합니다.
피벗 할 열 선택
처음에는 결과에 포함될 필드를 지정해야합니다. 이 예에서는 피벗 테이블의 AverageCostofCustomer 열을 고려했습니다. 그런 다음 열 머리글 11, 22 및 33이있는 세 개의 다른 열을 만들었습니다. 예-
얕은 대 깊은 복사 자바
Cost_According_To_Customers, [11], [22], [33]으로 'AverageCostofCustomer'를 선택합니다.
소스 테이블 선택
다음으로 피벗 테이블에 대한 소스 데이터를 반환 할 SELECT 문을 지정해야합니다. 이 예에서는 Suppliers 테이블에서 CustomerID 및 Cost를 반환합니다.
(공급 업체의 고객 ID, 비용 선택) 소스 테이블로
PIVOT 연산자를 적용한 다음 집계 함수 사용
다음으로 피벗 테이블을 생성하는 동안 사용할 집계 함수를 지정해야합니다. 이 예에서는 평균 비용을 계산하기 위해 AVG 함수를 사용했습니다.
PIVOT (AVG (비용)
피벗 값 언급
마지막으로 결과 피벗 테이블에 포함되어야하는 값을 언급해야합니다. 이러한 값은 피벗 테이블에서 열 머리글로 사용됩니다.
([11], [22], [33])) AS PivotTable의 CustomerID
이것이 PIVOT 연산자가 작동하는 방식입니다. SQL PIVOT에 대한이 기사에서 SQL UNPIVOT과 얼마나 다른지 이해하겠습니다.
SQL UNPIVOT
SQL UNPIVOT 연산자는 PIVOT의 반대 연산을 수행하는 데 사용됩니다. 열 데이터를 행 수준 데이터로 회전하는 데 사용됩니다. UNPIVOT의 구문은 PIVOT의 구문과 유사합니다. 유일한 차이점은 ' UNPIVOT” .
예:
SupplierID, AAA, BBB 및 CCC 열이있는 테이블을 작성하겠습니다. 또한 몇 개의 값을 삽입하십시오.
CREATE TABLE sampletable (SupplierID int, AAA int, BBB int, CCC int) GO INSERT INTO sampletable VALUES (1,3,5,6) INSERT INTO sampletable VALUES (2,9,2,8) INSERT INTO sampletable VALUES (3, 8,1,7) 이동
산출:
SupplierID | AAA | BBB | CCC |
하나 | 삼 | 5 | 6 |
2 | 9 | 2 | 8 |
삼 | 8 | 하나 | 7 |
이제 테이블의 피벗을 해제하려고합니다. 이를 위해 다음 코드를 참조 할 수 있습니다.
SELECT SupplierID, Customers, Products from (SELECT SupplierD, AAA, BBB, CCC FROM sampletable) p UNPIVOT (Products FOR Customers IN (AAA, BBB, CCC)) AS example GO
SupplierID | 고객 | 제품 |
하나 | AAA | 삼 |
하나 | BBB | 5 |
하나 r의 기계 학습 알고리즘 | CCC | 6 |
2 | AAA | 9 |
2 | BBB | 2 자바 클래스 경로 창 10 설정 |
2 | CCC | 8 |
삼 | AAA | 8 |
삼 | BBB | 하나 |
삼 | CCC | 7 |
이것이 SQL PIVOT 및 UNPIVOT을 사용하는 방법입니다. 이것으로 우리는이 기사를 마칩니다. SQL 사용 방법을 이해 하셨기를 바랍니다. 더 자세히 알고 싶다면 MySQL 이 오픈 소스 관계형 데이터베이스에 대해 알아보고 강사 주도의 라이브 교육 및 실제 프로젝트 경험과 함께 제공됩니다. 이 교육은 MySQL을 심층적으로 이해하고 주제에 대한 숙달을 달성하는 데 도움이됩니다.
질문이 있으십니까? SQL Pivot에 대한이 기사의 주석 섹션에서 언급 해 주시면 다시 연락 드리겠습니다.