2013-03-03 10 views
11

farklı tabloya tabloyu açmak, ama şöyle MySQL bir tablo vardır: aslında bir birleştirmektir (NedenseMySQL - Ve muhtemelen şu anda çok net hayal görmüyorum

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

başka bir tablo - ID dayalı ama birileri bu bölümü bana yardımcı olabilir, ben gerisini kendim) yapabileceğini düşünüyorum, ben artık şöyle olması satırları gerekli:

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

Yani temelde, ihtiyacım gibi satırları görüntülemek için: ID, columntitle, value Bunu kolayca yapmanın bir yolu var mı?

+0

bakınız:

Bu

ayrıca CROSS JOIN kullanılarak yapılabilir? –

+0

Evet, ancak siparişler çok önemli değil, satırlar ID - sütun başlığı - değer – user2128539

cevap

3

UNION ALL ürününü kullanmayı deneyin.

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

Sen UNPIVOT verilere çalışıyoruz.

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 

SQL Fiddle with Demo görme: satırlara sütunları dönüştürmek için bir UNION ALL sorgu kullanmak zorunda böylece MySQL, bir UNPIVOT fonksiyonu yoktur. Eğer 'Kimlik, değer columntitle' demek olan

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

+1

Teşekkür ederiz. Sonuçta çok daha kısa bir yol yok gibi görünüyor (oldukça fazla sütun var, her sütun için '...' dan… 'dan daha kolay bir yol olacağını düşündüm. – user2128539

+0

@ user2128539 Verileri açmak için farklı bir yol ekledim. – Taryn