logo

SQL でのピボットとアンピボット

SQL では、ピボットとアンピボットは、テーブルのより単純なビューを実現するために、あるテーブルを別のテーブルに変換するために使用される関係演算子です。従来から言えることは、 ピボット 演算子はテーブルの行データを列データに変換します。の アンピボット 演算子はその逆を行い、列ベースのデータを行に変換します。

構文:



1. ピボット:

 SELECT (ColumnNames) FROM (TableName) PIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias) //Alias is a temporary name for a table>

2. アンピボット:

 SELECT (ColumnNames) FROM (TableName) UNPIVOT ( AggregateFunction(ColumnToBeAggregated) FOR PivotColumn IN (PivotColumnValues) ) AS (Alias)>

例-1:
コース名、コース カテゴリ、価格などの値を含む geeksforgeeks という名前の単純なテーブルを作成し、それぞれの値を挿入しました。



 Create Table geeksforgeeks ( CourseName nvarchar(50), CourseCategory nvarchar(50), Price int ) Insert into geeksforgeeks values('C', 'PROGRAMMING', 5000) Insert into geeksforgeeks values('JAVA', 'PROGRAMMING', 6000) Insert into geeksforgeeks values('PYTHON', 'PROGRAMMING', 8000) Insert into geeksforgeeks values('PLACEMENT 100', 'INTERVIEWPREPARATION', 5000) SELECT * FROM geeksforgeeks>

得られる出力は次のとおりです。

コース名 コースカテゴリー 価格
C プログラミング 5000
ジャワ プログラミング 6000
ニシキヘビ プログラミング 8000
配置 100 面接準備 5000

さあ、応募してください ピボット このデータに対する演算子:

 SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION ) ) AS PivotTable>

Pivot 演算子を使用すると、次の結果が得られます。



コース名 プログラミング 面接の準備
C 5000 ヌル
ジャワ 6000 ヌル
配置 100 ヌル 5000
ニシキヘビ 8000 ヌル

例-2:
ここで、上記の例で作成した同じテーブル geeksforgeeks を使用し、ピボット テーブルにアンピボット演算子を適用します。

申請中 アンピボット オペレーター:

 SELECT CourseName, CourseCategory, Price FROM ( SELECT CourseName, PROGRAMMING, INTERVIEWPREPARATION FROM geeksforgeeks PIVOT ( SUM(Price) FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION) ) AS PivotTable ) P UNPIVOT ( Price FOR CourseCategory IN (PROGRAMMING, INTERVIEWPREPARATION) ) AS UnpivotTable>

Unpivot 演算子を使用すると、テーブルの列が行に正常に変換されたため、元のテーブルが戻ります。

コース名 コースカテゴリー 価格
C プログラミング 5000
ジャワ プログラミング 6000
配置 100 面接準備 5000
ニシキヘビ プログラミング 8000