Datenanalyse ist so viel mehr als das bloße Sammeln und Speichern von Informationen. Oft liegt die wahre Magie in der Art und Weise, wie wir diese Daten präsentieren und analysieren. Hier kommt der SQL-Befehl UNPIVOT
ins Spiel.
Inhalt dieser Seite
Was ist UNPIVOT?
Data Warehouse
Der UNPIVOT
-Befehl in SQL ermöglicht es uns, mehrere Spalten einer Tabelle in Zeilen umzuwandeln. Stellen Sie sich das wie das Umkippen (oder Entfalten) einer Tabelle vor, wobei das, was einst in horizontalen Spalten dargestellt wurde, jetzt vertikal in Zeilen dargestellt wird.
Wozu dient UNPIVOT?
- Datenbereinigung und -vorbereitung: Oft erhalten wir Daten in einem „flachen“ Format, bei dem unterschiedliche Datenpunkte als separate Spalten dargestellt werden. UNPIVOT hilft, diese Daten in ein formatiertes, zeilenbasiertes Format zu transformieren, das für weitere Analysen oder Berichte besser geeignet ist.
- Verbesserte Datenvisualisierung: Manchmal kann das Umwandeln von Spalten in Zeilen die Datenvisualisierung in Tools wie Power BI oder Tableau erleichtern.
- Flexibilität: Durch das Entfalten von Daten können Sie flexiblere Abfragen erstellen und spezifische Aspekte Ihrer Daten einfacher isolieren und analysieren.
SQL: Handbuch für Einsteiger: Der leichte Weg zum SQL-Experten
- Marke: BMU Media GmbH
- SQL: Handbuch für Einsteiger: Der leichte Weg zum SQL-Experten
Ein praktisches Beispiel
Nehmen wir an, wir haben eine Tabelle Sales
, die den Umsatz eines Geschäfts für verschiedene Monate darstellt:
| Product | January | February | March |
|---------|---------|----------|-------|
| Apples | 100 | 150 | 130 |
| Bananas | 80 | 85 | 90 |
Wenn wir diese Daten jedoch lieber zeilenweise für jeden Monat und jedes Produkt sehen möchten, können wir UNPIVOT verwenden:
SELECT Product, Month, Sales
FROM
(SELECT Product, January, February, March
FROM Sales) s
UNPIVOT
(Sales FOR Month IN
(January, February, March)
) AS unpvt;
Das Ergebnis wäre:
| Product | Month | Sales |
|---------|----------|-------|
| Apples | January | 100 |
| Apples | February | 150 |
| Apples | March | 130 |
| Bananas | January | 80 |
| Bananas | February | 85 |
| Bananas | March | 90 |
Mit UNPIVOT
haben wir die monatlichen Umsatzspalten in einzelne Zeilen umgewandelt, was eine klarere Sicht auf die monatlichen Verkaufstrends für jedes Produkt ermöglicht.
Der UNPIVOT
-Befehl ist ein mächtiges Werkzeug in Ihrem SQL-Arsenal. Ob Sie Daten für die Analyse vorbereiten, bessere Visualisierungen erstellen oder einfach flexiblere Abfragen gestalten möchten – mit UNPIVOT
können Sie Ihre Daten in neue Perspektiven transformieren. Tauchen Sie ein und experimentieren Sie damit!
Geht UNPIVOT auch auf anderen relationalen Datenbanken wie Oracle?
Ja, das Konzept des „Unpivoting“ von Daten, also das Umwandeln von Spalten in Zeilen, ist in vielen relationalen Datenbankverwaltungssystemen (DBMS) vorhanden, wenn auch manchmal unter verschiedenen Syntaxen oder Mechanismen. Lassen Sie uns dies an weiteren vier DBMS durchgehen:
- MSSQL (Microsoft SQL Server):
- Unterstützt direkt
UNPIVOT
. - Das Gegenstück dazu ist
PIVOT
, das Zeilen in Spalten umwandelt.
- Unterstützt direkt
- Oracle:
- Oracle hat keine eingebaute
UNPIVOT
-Funktion bis zur Version 10g. Ab Oracle 11g wurde jedoch dieUNPIVOT
-Syntax eingeführt, die ähnlich wie bei MSSQL funktioniert. - Das Gegenstück in Oracle ist ebenfalls
PIVOT
.
- Oracle hat keine eingebaute
- IBM DB2:
- IBM DB2 hat keine direkte
UNPIVOT
-Funktion. Das Unpivoting muss hier mit einer Kombination aus SQL-Funktionen erreicht werden, beispielsweise mit Hilfe vonUNION ALL
. Es ist etwas umständlicher als in MSSQL oder Oracle. - Ebenso gibt es keine direkte
PIVOT
-Funktion in DB2. Das Pivoting erfordert eine spezifische SQL-Abfragestruktur, oft unter Verwendung von Aggregatfunktionen.
- IBM DB2 hat keine direkte
- Teradata:
- Teradata unterstützt ebenfalls kein eingebautes
UNPIVOT
. Ähnlich wie bei DB2 müssen Sie hier Standard-SQL-Funktionen und -Techniken verwenden, um das gewünschte Ergebnis zu erzielen. - Das Gegenstück, das Pivoting, erfordert ebenfalls spezielle SQL-Abfragen.
- Teradata unterstützt ebenfalls kein eingebautes
Während UNPIVOT
(und sein Gegenstück PIVOT
) in einigen Systemen eingebaut ist und eine recht direkte Syntax bietet, erfordern andere Systeme einen kreativeren Ansatz mit Standard-SQL-Techniken. Es ist wichtig, sich mit den spezifischen Möglichkeiten und Einschränkungen des jeweiligen DBMS vertraut zu machen, wenn man solche Transformationen durchführt.
Datenbankentwicklung lernen mit SQL Server 2022: Der praxisorientierte Grundkurs – auch für SQL Server Express
PIVOT Beispiele
PIVOT
ist das genaue Gegenteil von UNPIVOT
. Während UNPIVOT
Spalten in Zeilen umwandelt, wandelt PIVOT
Zeilen in Spalten um.
Lassen Sie uns das am Beispiel von SQL Server durchgehen, da er eine direkte Unterstützung für PIVOT
bietet:
Ausgangssituation:
Angenommen, wir haben folgende Tabelle mit monatlichen Verkaufsdaten für verschiedene Produkte:
| Product | Month | Sales |
|---------|---------|-------|
| Apples | January | 100 |
| Apples | February| 150 |
| Apples | March | 130 |
| Bananas | January | 80 |
| Bananas | February| 85 |
| Bananas | March | 90 |
Nun möchten wir die Monate als Spalten und die Produkte als Zeilen darstellen:
Beispiel:
SELECT Product, [January], [February], [March]
FROM
(SELECT Product, Month, Sales
FROM SalesTable) s
PIVOT
(SUM(Sales)
FOR Month IN ([January], [February], [March])
) AS pvt;
Ergebnis:
| Product | January | February | March |
|---------|---------|----------|-------|
| Apples | 100 | 150 | 130 |
| Bananas | 80 | 85 | 90 |
Die PIVOT-Operation hat die monatlichen Verkaufszahlen pro Produkt in einer zeilenbasierten Ansicht in eine spaltenbasierte Ansicht umgewandelt.
Für Oracle sieht die Syntax ähnlich aus, obwohl es Unterschiede in der genauen Implementierung gibt. Bei IBM DB2 und Teradata, wie bereits erwähnt, gibt es keine direkte PIVOT
-Syntax, aber Sie können mit Aggregatfunktionen und bedingten Anweisungen (z.B. CASE
) ähnliche Ergebnisse erzielen. Das erfordert mehr Code und möglicherweise auch mehr Überlegungen im Hinblick auf die Datenstruktur und den gewünschten Output.
Hinterlasse jetzt einen Kommentar