Ibland behöver du omvandla kolumner till rader eller ta bort pivottabellen i MySQL. Eftersom MySQL inte har en funktion för att UNPIVOT eller REVERSE PIVOT en tabell, måste du skriva en SQL-fråga för att omvandla kolumner till rader. Så här tar du bort pivottabellen i MySQL.
Hur man tar bort pivottabellen i MySQL
Låt oss säga att du har följande pivottabell
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 | +------+------+------+------+
Låt oss säga att du vill ta bort pivottabellen i MySQL till följande.
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
Bonusläsning: Hur man skapar dynamiska pivottabeller i MySQL
Ta bort pivottabell i MySQL
Här är frågan för att göra unpivot i SQL. Eftersom MySQL inte erbjuder en UNPIVOT-funktion måste du använda UNION ALL-satsen in för att omvända pivoteringen av en tabell i 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 |
+------+-----+-------+
I ovanstående fråga skär vi i princip den ursprungliga tabellen i tre mindre – en för varje kolumn a,b,c och lägger sedan till dem under varandra med UNION ALL.
Om du vill filtrera rader kan du lägga till en WHERE-sats som visas nedan
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 läsning: Hur man överför rader till kolumner dynamiskt i MySQL
Tyvärr är det tråkigt men ett av de enda två sätten att unpivot i MySQL. Den andra involverar att göra en korsfogning, som visas nedan.
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 |
+------+-----+------+
Bonusläsning:Hur man automatiserar pivottabellsfrågor i MySQL
Du kan anpassa frågan ovan för att ta bort pivottabellen i MySQL med hjälp av WHERE-satsen. Du kan också använda ett rapporteringsverktyg för att plotta resultatet i en tabell. Här är ett exempel på en tabell skapad med Ubiq.

Om du vill skapa pivottabeller, diagram och instrumentpaneler från MySQL-databasen kan du prova Ubiq. Vi erbjuder en 14-dagars gratis provperiod.