2013-03-03 20 views
11

Ja prawdopodobnie nie widząc rzeczy bardzo jasne w tej chwili, ale mam tabeli w MySQL, które wygląda tak:MySQL - skręcić w tabeli do innej tabeli

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

Z jakiegoś powodu (a właściwie przyłączyć na innej tabeli - na podstawie ID, ale myślę, że jeśli ktoś może mi pomóc w tej części, mogę zrobić resztę ja), musiałem te wiersze tak być zamiast:

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

Więc w zasadzie muszę aby wyświetlić wiersze takie jak: ID, columntitle, value Czy można to łatwo zrobić?

+0

masz na myśli 'id, wartość columntitle'? –

+0

Tak, ale kolejność nie ma większego znaczenia, o ile wiersze są identyfikatorem - tytuł kolumny - wartość – user2128539

Odpowiedz

3

Spróbuj użyć UNION ALL.

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

Próbujesz UNPIVOT danych. MySQL nie ma UNPIVOT funkcji, więc trzeba będzie użyć UNION ALL zapytanie do konwersji kolumny na wiersze:

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 

Zobacz SQL Fiddle with Demo.

Można to również zrobić za pomocą 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 

Zobacz SQL Fiddle with Demo

+1

Dziękuję. Wygląda więc na to, że nie było wcale krótszej drogi (jest to kilka kolumn, myślałem, że będzie łatwiejszy sposób niż "wybierz ... z ..." dla każdej kolumny. – user2128539

+0

@ user2128539 zobacz moją edycję , Podałem inny sposób na rozpakowanie danych. – Taryn

Powiązane problemy