2013-03-03 9 views
11

Ich bin wahrscheinlich nicht die Dinge sehr klar, in diesem Moment zu sehen, aber ich habe eine Tabelle in MySQL, die wie folgt aussieht:MySQL - Drehtisch in verschiedene Tabelle

ID | a | b | c 
1 | a1 | b1 | c1 
2 | a2 | b2 | c2 

Aus irgendeinem Grund (a tatsächlich kommen auf eine andere Tabelle - basierend auf ID, aber ich denke, wenn jemand mich mit diesem Teil helfen kann, ich den Rest kann ich), brauchte ich diese Zeilen wie diese, anstatt zu sein:

1 | a1 | a 
1 | b1 | b 
1 | c1 | c 
2 | a2 | a 
2 | b2 | b 
2 | c2 | c 

Also im Grunde, ich brauche um die Zeilen zu sehen wie: ID, columntitle, value Gibt es eine Möglichkeit, dies leicht zu tun?

+0

sind Sie 'ID, den Wert, columntitle' bedeuten:

Dies kann auch ein CROSS JOIN mit getan werden? –

+0

Ja, aber die Reihenfolge ist nicht so wichtig, solange die Zeilen ID - Spalte Titel - Wert – user2128539

Antwort

3

Versuchen Sie UNION ALL zu verwenden.

SELECT ID, a, 'a' 
FROM tbl 
WHERE ID = 1 
UNION 
SELECT ID, b, 'b' 
FROM tbl 
WHERE ID = 2 
17

Sie versuchen zu Entpivotisierung die Daten. MySQL keine Entpivotisierung Funktion haben, so dass Sie eine UNION ALL Abfrage verwenden müssen, um die Spalten in Zeilen zu konvertieren:

select id, 'a' col, a value 
from yourtable 
union all 
select id, 'b' col, b value 
from yourtable 
union all 
select id, 'c' col, c value 
from yourtable 

Siehe SQL Fiddle with Demo.

select t.id, 
    c.col, 
    case c.col 
    when 'a' then a 
    when 'b' then b 
    when 'c' then c 
    end as data 
from yourtable t 
cross join 
(
    select 'a' as col 
    union all select 'b' 
    union all select 'c' 
) c 

SQL Fiddle with Demo

Siehe
+1

Vielen Dank. Es scheint also, dass es keinen wirklich kürzeren Weg gab (es sind ziemlich viele Spalten, ich dachte, es gäbe einen einfacheren Weg als eine 'Auswahl ... von ...' für jede Spalte. – user2128539

+0

@ user2128539 siehe meine Bearbeitung , Habe ich eine andere Möglichkeit zur Deaktivierung der Daten eingefügt. – Taryn