Nogle gange har du brug for at transponere kolonner til rækker eller unpivot tabel i MySQL. Da MySQL ikke har en funktion til at UNPIVOT eller REVERSE PIVOT en tabel, skal du skrive en SQL-forespørgsel for at transponere kolonner til rækker. Sådan deaktiverer du pivottabellen i MySQL.
Sådan ophæver du pivottabellen i MySQL
Lad os sige, at du har følgende pivottabel
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 | +------+------+------+------+
Lad os sige, at du vil fjerne pivottabellen i MySQL til følgende.
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
Bonuslæsning: Sådan opretter du dynamiske pivottabeller i MySQL
Fjern pivot-tabel i MySQL
Her er forespørgslen om at gøre unpivot i SQL. Da MySQL ikke tilbyder en UNPIVOT-funktion, skal du bruge UNION ALL-klausulen ind for at vende pivotering af en tabel 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 ovenstående forespørgsel skærer vi grundlæggende den oprindelige tabel i 3 mindre – en for hver kolonne a,b,c og tilføjer dem derefter den ene under den anden ved hjælp af UNION ALL.
Hvis du vil filtrere rækker, kan du tilføje en WHERE-sætning som vist nedenfor
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;
Bonuslæse: Sådan transponerer du rækker til kolonner dynamisk i MySQL
Desværre er det kedeligt, men en af de eneste 2 måder at unpivot i MySQL. Den anden involverer at lave en krydssammenføjning, som vist nedenfor.
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æser:Sådan automatiseres pivottabelforespørgsler i MySQL
Du kan tilpasse ovenstående forespørgsel til at fjerne pivottabellen i MySQL ved hjælp af WHERE-sætning. Du kan også bruge et rapporteringsværktøj til at plotte resultatet i en tabel. Her er et eksempel på en tabel oprettet ved hjælp af Ubiq.
Hvis du vil oprette pivottabeller, diagrammer og dashboards fra MySQL-databasen, kan du prøve Ubiq. Vi tilbyder en 14-dages gratis prøveperiode.