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

Trasporre una riga in colonne con MySQL senza usare UNIONS?

L'ho preso dal libro The Art of SQL , pagine 284-286:

Supponiamo che il nome del tuo tavolo sia foo .

Per prima cosa, crea una tabella chiamata pivot :

CREATE Table pivot (
  count int
);

Inserisci in quelle tabelle tante righe quante sono le colonne che vuoi ruotare in foo . Dato che hai tre colonne in foo che vuoi trasformare, crea tre righe nella tabella pivot:

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

Ora fai un join cartesiano tra foo e pivot , utilizzando un CASE per selezionare la colonna corretta in base al conteggio:

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;

Questo dovrebbe darti quello che vuoi.