PIVOT を使用した SQL Server の例
列の数が常にわかっている実際のタイプのシナリオで単純な PIVOT 関数を使用する SQL Server。
前回の記事で、UNPIVOT の使用について書きました。これは、行を列に変換する PIVOT とは逆の関数です。実際の例とは限らないいくつかのデータを使用しましたが、プレイするのに十分なオプションを提供します。と。
Dummy data
MyRow | MyCol | CalcCol |
1 | 1 | 1 |
1 | 3 | 1 |
1 | s | 1 |
2 | 2 | 1 |
2 | 2 | 6 |
2 | 3 | 1 |
3 | 2 | 1 |
3 | 3 | 1 |
3 | 3 | 3 |
3 | 5 | 5 |
最初に行うことは、このダミー データ セットを作成することです。そのため、以下のコードを使用してそれを行うことができます。
テーブル タイプも作成します (これらは一時テーブルのパフォーマンスを向上させることができます)。
SQL
CREATE TYPE c1bs_Piv AS TABLE(MyRow NVARCHAR(10),--Row IDMyCol NVARCHAR(10),--Value to become columnCalcCol INT--Value to be Summed)GODECLARE @Piv c1bs_PivINSERT INTO @PivSELECT '1','1',1 UNIONSELECT '1','s',1 UNIONSELECT '1','3',1 UNIONSELECT '2','2',6 UNIONSELECT '2','2',1 UNIONSELECT '2','3',1 UNIONSELECT '3','5',5 UNIONSELECT '3','2',1 UNIONSELECT '3','3',1 UNIONSELECT '3','3',3
データをピボットするには、次の SQL コードを記述します。
SELECT *FROM @PivPIVOT (SUM(CalcCol)FOR MyColIN ([1],[2],[3])) AS MyTable
これにより、次のデータセットが返されます。上記で列「5」と「s」を追加した場合、これらはスキップされることに注意してください。次の記事では、それを確実にキャプチャする予定です。
MyRow | 1 | 2 | 3 |
1 | 1 | NULL | 1 |
2 | NULL | 7 | 1 |
3 | NULL | 1 | 4 |