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 |