- Kategorien:
UNPIVOT¶
Rotiert eine Tabelle, indem Spalten in Zeilen verwandelt werden. UNPIVOT ist ein relationaler Operator, der zwei Spalten (aus einer Tabelle oder Unterabfrage) zusammen mit einer Spaltenliste nimmt und für jede in der Liste angegebene Spalte eine Zeile generiert. Bei einer Abfrage wird er in der FROM-Klausel nach dem Tabellennamen oder der Unterabfrage angegeben.
Beachten Sie, dass UNPIVOT nicht das genaue Gegenteil von PIVOT ist, da sich mit PIVOT vorgenommene Aggregationen nicht rückgängig machen lassen.
Mit diesem Operator kann eine breite Tabelle (z. B. empid
, jan_sales
, feb_sales
, mar_sales
) in eine schmalere Tabelle (z. B. empid
, month
, sales
) umgewandelt werden.
- Siehe auch:
Syntax¶
SELECT ...
FROM ...
UNPIVOT ( <value_column>
FOR <name_column> IN ( <column_list> ) )
[ ... ]
value_column
Der Name, der der generierten Spalte zugewiesen werden soll, die mit den Werten aus den Spalten in der Spaltenliste aufgefüllt wird.
name_column
Der Name, der der generierten Spalte zugewiesen werden soll, die mit den Namen der Spalten in der Spaltenliste aufgefüllt wird.
column_list
Die Namen der Spalten in der Quelltabelle oder Unterabfrage, die in eine einzige Pivotspalte verschmälert werden.
name_column
wird mit den Spaltennamen aufgefüllt,value_column
mit den Spaltenwerten.Die
column_list
darf nur literale Spaltennamen enthalten, keine Unterabfrage.
Beispiele¶
Entpivotieren Sie bei einer angegebenen Tabelle monthly_sales
mit folgender Struktur und folgenden Daten die einzelnen Monatsspalten, um anhand von month
einen einzelnen sales
-Wert für die jeweiligen Mitarbeiter zurückzugeben:
-- example setup CREATE OR REPLACE TABLE monthly_sales(empid INT, dept TEXT, jan INT, feb INT, mar INT, april INT); INSERT INTO monthly_sales VALUES (1, 'electronics', 100, 200, 300, 100), (2, 'clothes', 100, 300, 150, 200), (3, 'cars', 200, 400, 100, 50); -- UNPIVOT example SELECT * FROM monthly_sales UNPIVOT(sales FOR month IN (jan, feb, mar, april)) ORDER BY empid; +-------+-------------+-------+-------+ | EMPID | DEPT | MONTH | SALES | |-------+-------------+-------+-------| | 1 | electronics | JAN | 100 | | 1 | electronics | FEB | 200 | | 1 | electronics | MAR | 300 | | 1 | electronics | APRIL | 100 | | 2 | clothes | JAN | 100 | | 2 | clothes | FEB | 300 | | 2 | clothes | MAR | 150 | | 2 | clothes | APRIL | 200 | | 3 | cars | JAN | 200 | | 3 | cars | FEB | 400 | | 3 | cars | MAR | 100 | | 3 | cars | APRIL | 50 | +-------+-------------+-------+-------+