A volte è necessario trasporre le colonne in righe o annullare il pivot in MySQL. Poiché MySQL non ha una funzione per UNPIVOT o REVERSE PIVOT di una tabella, è necessario scrivere una query SQL per trasporre le colonne in righe. Ecco come annullare il pivot della tabella in MySQL.
Come annullare il pivot della tabella in MySQL
Supponiamo che tu abbia la seguente tabella pivot
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 | +------+------+------+------+
Supponiamo che tu voglia annullare il pivot della tabella in MySQL come segue.
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
Bonus Leggi: Come creare tabelle pivot dinamiche in MySQL
Unpivot tabella in MySQL
Ecco la query per fare unpivot in SQL. Poiché MySQL non offre una funzione UNPIVOT, è necessario utilizzare la clausola UNION ALL per eseguire il pivot inverso di una tabella in MySQL.
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 | +------+-----+-------+
Nella query precedente, fondamentalmente tagliamo la tabella originale in 3 tabelle più piccole, una per ogni colonna a, b, c e poi le aggiungiamo una sotto l'altra usando UNION ALL.
Se desideri filtrare le righe, puoi aggiungere una clausola WHERE come mostrato di seguito
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;
Bonus letto: Come trasporre righe in colonne in modo dinamico in MySQL
Sfortunatamente, è noioso ma uno degli unici 2 modi per annullare il pivot in MySQL. L'altro prevede l'esecuzione di un cross join, come mostrato di seguito.
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 | +------+-----+------+
Bonus Lettura:Come automatizzare le query sulle tabelle pivot in MySQL
È possibile personalizzare la query precedente per annullare il pivot della tabella in MySQL, utilizzando la clausola WHERE. Puoi anche utilizzare uno strumento di reporting per tracciare il risultato in una tabella. Ecco un esempio di una tabella creata con Ubiq.
Se vuoi creare tabelle pivot, grafici e dashboard dal database MySQL, puoi provare Ubiq. Offriamo una prova gratuita di 14 giorni.