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

Transponere en række til kolonner med MySQL uden at bruge UNIONS?

Jeg fik det ud af bogen The Art of SQL , side 284-286:

Lad os sige, at dit bordnavn er foo .

Først skal du oprette en tabel kaldet pivot :

CREATE Table pivot (
  count int
);

Indsæt lige så mange rækker i tabellerne, som der er kolonner, som du vil pivotere i foo . Da du har tre kolonner i foo at du vil pivotere, skal du oprette tre rækker i pivottabellen:

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

Lav nu en kartesisk join mellem foo og pivot , ved hjælp af en CASE for at vælge den korrekte kolonne baseret på antallet:

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;

Dette burde give dig, hvad du ønsker.




  1. sp_add_schedule vs sp_add_jobschedule i SQL Server:Hvad er forskellen?

  2. Opdater to forskellige rækker i én linje af SQL

  3. Nye metadata-kun kolonneændringer i SQL Server 2016

  4. Find ud af, om et objekt er en funktion med tabelværdi i SQL Server med OBJECTPROPERTY()