Manchmal müssen Sie Spalten in Zeilen transponieren oder Tabellen in MySQL entpivotieren. Da MySQL keine Funktion zum UNPIVOT oder REVERSE PIVOT einer Tabelle hat, müssen Sie eine SQL-Abfrage schreiben, um Spalten in Zeilen zu transponieren. So entpivotieren Sie eine Tabelle in MySQL.
So entpivotieren Sie eine Tabelle in MySQL
Angenommen, Sie haben die folgende Pivot-Tabelle
mysql>create table data(id int, a varchar(255), b varchar(255), c varchar(255)); mysql>insert into data(id,a,b,c) values(1,'a1','b1','c1'),(2,'a1','b1','c1'); mysql>select * from data; +------+------+------+------+ | id | a | b | c | +------+------+------+------+ | 1 | a1 | b1 | c1 | | 2 | a1 | b1 | c1 | +------+------+------+------+
Angenommen, Sie möchten die Tabelle in MySQL wie folgt entpivotieren.
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
Bonuslektüre: So erstellen Sie dynamische Pivot-Tabellen in MySQL
Unpivot-Tabelle in MySQL
Hier ist die Abfrage zum Entpivotieren in SQL. Da MySQL keine UNPIVOT-Funktion anbietet, müssen Sie die UNION ALL-Klausel verwenden, um eine Tabelle in MySQL umzukehren.
mysql> select id, 'a' col, a value from data union all select id, 'b' col, b value from data union all select id, 'c' col, c value from data; +------+-----+-------+ | id | col | value | +------+-----+-------+ | 1 | a | a1 | | 2 | a | a1 | | 1 | b | b1 | | 2 | b | b1 | | 1 | c | c1 | | 2 | c | c1 | +------+-----+-------+
In der obigen Abfrage schneiden wir die ursprüngliche Tabelle im Grunde in 3 kleinere – eine für jede Spalte a,b,c – und hängen sie dann untereinander mit UNION ALL an.
Wenn Sie Zeilen filtern möchten, können Sie eine WHERE-Klausel wie unten gezeigt hinzufügen
mysql> select id, 'a' col, a value from data WHERE condition union all select id, 'b' col, b value from data WHERE condition union all select id, 'c' col, c value from data WHERE condition;
Bonuslektüre: How to Transpose Rows to Columns Dynamically in MySQL
Leider ist es mühsam, aber eine der wenigen Möglichkeiten, in MySQL zu entpivotieren. Die andere beinhaltet einen Cross Join, wie unten gezeigt.
mysql> select t.id, c.col, case c.col when 'a' then a when 'b' then b when 'c' then c end as data from data t cross join ( select 'a' as col union all select 'b' union all select 'c' ) c; +------+-----+------+ | id | col | data | +------+-----+------+ | 1 | a | a1 | | 2 | a | a1 | | 1 | b | b1 | | 2 | b | b1 | | 1 | c | c1 | | 2 | c | c1 | +------+-----+------+
Bonuslektüre:So automatisieren Sie Pivot-Tabellenabfragen in MySQL
Sie können die obige Abfrage anpassen, um die Pivot-Tabelle in MySQL mithilfe der WHERE-Klausel zu entpivotieren. Sie können auch ein Berichtstool verwenden, um das Ergebnis in einer Tabelle darzustellen. Hier ist ein Beispiel für eine mit Ubiq erstellte Tabelle.
Wenn Sie Pivot-Tabellen, Diagramme und Dashboards aus einer MySQL-Datenbank erstellen möchten, können Sie Ubiq ausprobieren. Wir bieten eine 14-tägige kostenlose Testversion an.