2013-03-03 17 views
11

sto probabilmente non vedere le cose molto chiare in questo momento, ma ho una tabella in MySQL che assomiglia a questo:MySQL - trasformare tabella in tabella diversa

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

Per qualche motivo (in realtà un join su un altro tavolo - sulla base ID, ma credo che se qualcuno mi può aiutare con questa parte, posso fare il resto io stesso), avevo bisogno di quelle file di essere come questo, invece:

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

Quindi, fondamentalmente, ho bisogno per visualizzare le righe come: ID, columntitle, value C'è un modo per farlo facilmente?

+0

stai dire 'ID, il valore, columntitle'? –

+0

Sì, ma l'ordine non ha importanza, purché le righe siano ID - titolo della colonna - valore – user2128539

risposta

3

Prova a utilizzare UNION ALL.

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

Si sta tentando di UNPIVOT i dati. MySQL non ha una funzione UNPIVOT, quindi si dovrà utilizzare una query UNION ALL per convertire le colonne in righe:

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 

Vedi SQL Fiddle with Demo.

Questo può anche essere fatto utilizzando un CROSS JOIN:

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 

Vedi SQL Fiddle with Demo

+1

Grazie. Quindi sembra che dopo tutto non ci sia stata una vera via più breve (sono alcune colonne, ho pensato che ci sarebbe stato un modo più semplice di un "selezionare ... da ..." per ogni colonna. – user2128539

+0

@ user2128539 vedere la mia modifica , Ho incluso un modo diverso per sbloccare i dati. – Taryn