SQL Server mit PIVOT-Beispiel
Im letzten I-Artikel habe ich über die Verwendung von UNPIVOT geschrieben, dies ist die entgegengesetzte Funktion PIVOT, bei der Zeilen in Spalten umgewandelt werden. Ich habe einige Daten verwendet, die möglicherweise nicht unbedingt ein Beispiel aus der realen Welt sind, uns aber genügend Optionen zum Spielen bieten mit.
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 |
Als erstes müssen wir diesen Dummy-Datensatz erstellen, damit wir das mit dem folgenden Code tun können.
Wir werden auch einen Tabellentyp erstellen (diese können die Leistung von temporären Tabellen verbessern).
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
SELECT *FROM @PivPIVOT (SUM(CalcCol)FOR MyColIN ([1],[2],[3])) AS MyTable
Und dies wird den folgenden Datensatz zurückgeben. Beachten Sie, dass dort, wo wir oben die Spalten „5“ und „s“ hinzugefügt haben, diese damit übersprungen würden, und im nächsten Artikel werden wir sicherstellen, dass wir sie erfassen.
MyRow | 1 | 2 | 3 |
1 | 1 | NULL | 1 |
2 | NULL | 7 | 1 |
3 | NULL | 1 | 4 |