sql >> Database teknologi >  >> RDS >> Mysql

Sådan unpivot tabel i MySQL

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.

  1. Hvordan oprettes skema i Oracle ved hjælp af SQL Developer?

  2. Hvordan indlæser din Oracle ODBC-driver Oracle-klienten?

  3. Lær MySQL / MariaDB for begyndere – del 1

  4. Nulstil en sekvens i henhold til året, ikke med min eller max værdi