Soms moet u kolommen in rijen transponeren of de draaitabel in MySQL ongedaan maken. Aangezien MySQL geen functie heeft om een tabel ONPIVOT of OMGEKEERD te draaien, moet u een SQL-query schrijven om kolommen in rijen te transponeren. Hier leest u hoe u de draaitabel in MySQL ongedaan maakt.
De draaiing van de tabel in MySQL ongedaan maken
Stel dat u de volgende draaitabel heeft
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 | +------+------+------+------+
Stel dat u de draaitabel in MySQL naar het volgende wilt ongedaan maken.
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
Bonus Lezen:Dynamische draaitabellen maken in MySQL
Tabel ongedaan maken in MySQL
Hier is de query om het draaien in SQL ongedaan te maken. Aangezien MySQL geen UNPIVOT-functie biedt, moet u de UNION ALL-clausule in gebruiken om een tabel in MySQL om te draaien.
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 de bovenstaande query hebben we de oorspronkelijke tabel in feite in 3 kleinere geknipt - één voor elke kolom a, b, c en deze vervolgens onder elkaar toegevoegd met UNION ALL.
Als u rijen wilt filteren, kunt u een WHERE-component toevoegen, zoals hieronder weergegeven
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;
Lees bonus: Hoe u rijen dynamisch naar kolommen kunt transponeren in MySQL
Helaas is het vervelend, maar een van de weinige 2 manieren om het draaien in MySQL ongedaan te maken. De andere is het doen van een cross-join, zoals hieronder weergegeven.
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 lezen:hoe u draaitabelquery's in MySQL kunt automatiseren
U kunt de bovenstaande query aanpassen om de draaitabel in MySQL ongedaan te maken, met behulp van de WHERE-clausule. U kunt ook een rapportagetool gebruiken om het resultaat in een tabel te plotten. Hier is een voorbeeld van een tabel gemaakt met Ubiq.

Als u draaitabellen, grafieken en dashboards wilt maken vanuit de MySQL-database, kunt u Ubiq proberen. We bieden een gratis proefperiode van 14 dagen.