Điều bạn cần làm trước tiên, hủy hợp nhất dữ liệu và sau đó xoay vòng dữ liệu đó. Nhưng tiếc là MySQL không có các chức năng này, do đó bạn sẽ cần phải sao chép chúng bằng cách sử dụng truy vấn UNION ALL
cho trục xoay và chức năng tổng hợp với một số CASE
cho trục xoay.
Các UNPIVOT hoặc UNION ALL
mảnh mất dữ liệu từ col1 của bạn, col2, vv và biến nó thành nhiều hàng:
select id, month, col1 value, 'col1' descrip
from yourtable
union all
select id, month, col2 value, 'col2' descrip
from yourtable
union all
select id, month, col3 value, 'col3' descrip
from yourtable
union all
select id, month, col4 value, 'col4' descrip
from yourtable
Xem SQL Fiddle with Demo.
Kết quả:
| ID | MONTH | VALUE | DESCRIP |
----------------------------------
| 101 | Jan | A | col1 |
| 102 | feb | C | col1 |
| 101 | Jan | B | col2 |
| 102 | feb | A | col2 |
| 101 | Jan | (null) | col3 |
| 102 | feb | G | col3 |
| 101 | Jan | B | col4 |
| 102 | feb | E | col4 |
Sau đó, bạn quấn này trong một subquery để áp dụng tổng hợp và CASE
để chuyển đổi này sang định dạng bạn muốn:
select descrip,
max(case when month = 'jan' then value else 0 end) jan,
max(case when month = 'feb' then value else 0 end) feb
from
(
select id, month, col1 value, 'col1' descrip
from yourtable
union all
select id, month, col2 value, 'col2' descrip
from yourtable
union all
select id, month, col3 value, 'col3' descrip
from yourtable
union all
select id, month, col4 value, 'col4' descrip
from yourtable
) src
group by descrip
Xem SQL Fiddle with demo
Các kết quả là:
| DESCRIP | JAN | FEB |
-----------------------
| col1 | A | C |
| col2 | B | A |
| col3 | 0 | G |
| col4 | B | E |
Chào mừng bạn đến với stackoverflow. [Đây là một câu hỏi rất phổ biến] (http://stackoverflow.com/search?q= [mysql] + trục). Vui lòng dành một vài phút để tìm kiếm các lưu trữ. Trước tiên hãy thử điều chỉnh một trong các câu trả lời trước. Sau đó, nếu bạn gặp sự cố, hãy đăng truy vấn của bạn và bất kỳ lỗi nào tại đây. – Leigh
có thể trùng lặp của [hàng pivot của MySQL thành số cột động] [http://stackoverflow.com/questions/12004603/mysql-pivot-row-into-dynamic-number-of-columns) – RichardTheKiwi