Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Transponieren Sie eine Zeile in Spalten mit MySQL, ohne UNIONS zu verwenden?

Ich habe das aus dem Buch The Art of SQL , Seiten 284-286:

Nehmen wir an, Ihr Tabellenname ist foo .

Erstellen Sie zuerst eine Tabelle namens pivot :

CREATE Table pivot (
  count int
);

Fügen Sie in diese Tabellen so viele Zeilen ein, wie es Spalten gibt, die Sie in foo pivotieren möchten . Da Sie drei Spalten in foo haben die Sie pivotieren möchten, erstellen Sie drei Zeilen in der Pivot-Tabelle:

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

Führen Sie nun eine kartesische Verknüpfung zwischen foo durch und pivot , mit einem CASE So wählen Sie die richtige Spalte basierend auf der Anzahl aus:

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;

Dies sollte Ihnen das geben, was Sie wollen.