UNPIVOT & PIVOT

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.

Was ist UNPIVOT?

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?

  1. 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.
  2. Verbesserte Datenvisualisierung: Manchmal kann das Umwandeln von Spalten in Zeilen die Datenvisualisierung in Tools wie Power BI oder Tableau erleichtern.
  3. Flexibilität: Durch das Entfalten von Daten können Sie flexiblere Abfragen erstellen und spezifische Aspekte Ihrer Daten einfacher isolieren und analysieren.

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:

  1. MSSQL (Microsoft SQL Server):
    • Unterstützt direkt UNPIVOT.
    • Das Gegenstück dazu ist PIVOT, das Zeilen in Spalten umwandelt.
  2. Oracle:
    • Oracle hat keine eingebaute UNPIVOT-Funktion bis zur Version 10g. Ab Oracle 11g wurde jedoch die UNPIVOT-Syntax eingeführt, die ähnlich wie bei MSSQL funktioniert.
    • Das Gegenstück in Oracle ist ebenfalls PIVOT.
  3. IBM DB2:
    • IBM DB2 hat keine direkte UNPIVOT-Funktion. Das Unpivoting muss hier mit einer Kombination aus SQL-Funktionen erreicht werden, beispielsweise mit Hilfe von UNION 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.
  4. 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.

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.

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.

Wie hat dir der Artikel gefallen?

Vielen Dank für dein Feedback!
Über Frank 74 Artikel

Ich bin Frank, Data Warehouse und BI-Entwickler mit langjähriger Expertise in diesem Bereich. Ich verfüge über mehr als 20 Jahre Berufserfahrung im DWH Umfeld. Das Analysieren und Interpretieren von Zahlen, Daten und Fakten ist meine große Leidenschaft, aus diesem Grunde ist auch diese Seite hier entstanden.

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen

E-Mail Adresse wird nicht veröffentlicht.


*