2013-03-03 47 views
11

Tôi có thể không nhìn thấy những điều rất rõ ràng tại thời điểm này, nhưng tôi có một bảng trong MySQL mà trông như thế này:MySQL - biến bảng vào bảng khác nhau

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

Đối với một số lý do (thực sự là một gia trên bảng khác - dựa trên ID, nhưng tôi nghĩ nếu ai đó có thể giúp tôi ra với phần này, tôi có thể làm phần còn lại bản thân mình), tôi cần những hàng trở nên giống như thay vì điều này:

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

Vì vậy, về cơ bản, tôi cần để xem các hàng như: ID, columntitle, value Có cách nào để thực hiện điều này một cách dễ dàng không?

+0

bạn đang có nghĩa là 'ID, giá trị, columntitle'? –

+0

Có, nhưng thứ tự không quan trọng quá nhiều, miễn là các hàng là ID - tiêu đề cột - giá trị – user2128539

Trả lời

3

Hãy thử sử dụng UNION ALL.

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

Bạn đang cố gắng để unpivot dữ liệu. MySQL không có chức năng UNPIVOT, vì vậy bạn sẽ phải sử dụng một truy vấn UNION ALL để chuyển đổi các cột thành hàng:

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 

Xem SQL Fiddle with Demo.

này cũng có thể được thực hiện bằng một 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 

Xem SQL Fiddle with Demo

+1

Cảm ơn bạn. Vì vậy, có vẻ như không có cách nào ngắn hơn thực sự (nó là một vài cột, tôi nghĩ rằng sẽ có một cách dễ dàng hơn so với 'chọn ... từ ...' cho mỗi cột. – user2128539

+0

@ user2128539 xem chỉnh sửa của tôi , Tôi đã bao gồm một cách khác để hủy hợp nhất dữ liệu. – Taryn

Các vấn đề liên quan