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.