sql >> Databasteknik >  >> RDS >> Mysql

Transponera en rad till kolumner med MySQL utan att använda UNIONS?

Jag fick det här ur boken The Art of SQL , sidorna 284-286:

Låt oss säga att ditt bordsnamn är foo .

Skapa först en tabell som heter pivot :

CREATE Table pivot (
  count int
);

Infoga i tabellen så många rader som det finns kolumner som du vill pivotera i foo . Eftersom du har tre kolumner i foo att du vill pivotera, skapa tre rader i pivottabellen:

insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);

Gör nu en kartesisk koppling mellan foo och pivot , med en CASE för att välja rätt kolumn baserat på antalet:

SELECT foo.id, Case pivot.count
  When 1 Then cat
  When 2 Then one_above
  When 3 Then top_level
End Case
FROM foo JOIN pivot;

Detta bör ge dig vad du vill ha.




  1. Finns det en Oracle SQL-fråga som samlar flera rader till en rad?

  2. Samla schemastatistik med FND_STATS i EBS 11i och R12

  3. Affärslogik:Databas eller applikationslager

  4. MySQL till Excel-generering med PHP