Mit diesem T-SQL-Beispiel können Sie dank der SQL Server UNPIVOT Funktion ganz einfach Spalten in Zeilen umwandeln.
Es ist das genaue Gegenteil der PIVOT-Abfrage. In diesem Beispiel werden nur die ersten sechs Monate des Jahres als Spalten verwendet, nämlich Januar bis Juni. Sie können jedoch die Abfrage auf alle 12 Perioden des Jahres erweitern, indem Sie die fehlenden hinzufügen.
Table of Contents
1. Daten erstellen, um sie mit dem UNPIVOT-Operator in Zeilen umzuwandeln
Die SQL Server Verkaufstabelle enthält beispielsweise eine Typspalte und die Monatsspalten. Diese enthalten jeweils den Typ und den Betrag der Verkäufe für den Monat. Zum Starten kopieren und fügen Sie einfach die SQL-Abfrage für die Tabellenerstellung in SSMS ein.
Zuerst erstellen Sie die Beispieltabelle mit diesem Skript, kopieren und fügen Sie das Beispiel einfach in Ihr SQL Server Management Studio Fenster ein.
-- Zuerst löschen Sie die Tabelle Verkäufe nach Monat, falls sie bereits in der DB existiert IF EXISTS( SELECT 1 FROM sys.objects WHERE object_id = object_id(N'[dbo].[SALES_BY_MONTH]') AND type in (N'U') ) -- BEGIN DROP TABLE [dbo].[SALES_BY_MONTH] END; -- Erstellen Sie die VERKAUFE Tabelle CREATE table [dbo].[SALES_BY_MONTH] ( [SalesType] NVARCHAR(20), [January] NUMERIC(5), [February] NUMERIC(5), [March] NUMERIC(5), [April] NUMERIC(5), [May] NUMERIC(5), [June] NUMERIC(5) );
2. Daten in die Quelltabelle einfügen, um sie zu transformieren
Als Nächstes fügen Sie die Daten in die Tabelle ein, die transponiert werden soll. Jede SQL-Dateneinfügung fügt 12 neue Verkaufsbeträge hinzu. Eine Spalte pro Monat, mit dem zugehörigen Verkaufstyp.
Fügen Sie die fehlenden Monate hinzu, falls nötig. So können Sie die 12 Monate des Jahres in einer einzigen SQL Server Abfrage von Spalten in Zeilen umwandeln.
-- Einfügen von Beispielsdaten für jeden Monat: d.h. von Januar bis Juni -- Die Monatsspalten werden von Spalten in Zeilen umgewandelt INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] ) VALUES ( N'Sales', 1000, 2000, 3000, 4000, 5000, 6000); INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] ) VALUES ( N'Discounts', 100, 200, 300, 400, 500, 600); INSERT INTO dbo.SALES_BY_MONTH ( [SalesType], [January], [February], [March], [April], [May], [June] ) VALUES ( N'Offers', 10, 20, 30, 40, 50, 60); -- Überprüfen Sie die eingefügten Zeilen in der Verkaufstabelle SELECT * FROM dbo.SALES_BY_MONTH;
3. SQL Server UNPIVOT-Abfrage, um Spalten in Zeilen umzuwandeln
Schließlich besteht die SQL Server UNPIVOT-Funktion aus 3 verschiedenen Schritten, um die Spalten in Zeilen zu transponieren.
- Die Auswahl der 3 Ergebnisspalten, d.h. Typ, Monat und Betrag.
- Dann die SQL-Unterabfrage mit der ursprünglichen Datenauswahl.
- Die UNPIVOT-Operation selbst mit den 6 explizit benannten Monaten.
-- UNPIVOT Spalten zu Zeilen mit SQL-Abfrage SELECT [TYPE], Monat, Betrag FROM ( SELECT [TYPE], [January], [February], [March], [April], [May], [June] FROM dbo.SALES_BY_MONTH ) sbm UNPIVOT (Betrag FOR Monat IN ([January], [February], [March], [April], [May], [June]) )AS SalesUnPivot;
Über die PIVOT- und UNPIVOT-Operatoren von SQL Server
Falls Sie immer noch Schwierigkeiten mit diesem SQL Server UNPIVOT-Operator und seiner Syntax haben, kopieren und fügen Sie einfach das Beispiel ein und wiederholen die drei Schritte, indem Sie sie an Ihren realen Fall anpassen. Beginnen Sie damit, die Spalten umzubenennen, um zu verstehen, wie es funktioniert. Abschließend ist die offizielle Microsoft-Dokumentation für die unpivot-Funktion verfügbar. UNPIVOT ist das Gegenteil der PIVOT-Funktion, hier ist ein weiteres kurzes Tutorial zur Verwendung der SQL Server PIVOT-Funktion.
Be the first to comment