sql >> Databasteknik >  >> RDS >> Mysql

Hur man tar bort pivottabellen i MySQL

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.

  1. SQL Server:Användbara tips för nybörjare

  2. TAN() Exempel i SQL Server

  3. Neo4j - Ta bort ett förhållande med Cypher

  4. Returnera den n:e posten från MySQL-frågan