Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mysql Chuyển đổi Cột thành hàng (Bảng tổng hợp)

Những gì bạn cần làm trước tiên là giải nén dữ liệu và sau đó xoay nó. Nhưng tiếc là MySQL không có các chức năng này nên bạn sẽ cần phải sao chép chúng bằng cách sử dụng UNION ALL truy vấn cho hàm bỏ chia sẻ và một hàm tổng hợp với CASE cho trục.

Bỏ chia hoặc UNION ALL mảnh lấy dữ liệu từ col1, col2, v.v. của bạn 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 đặt nó trong một truy vấn con để áp dụng tổng hợp và CASE để chuyển đổi nó thành đị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 với bản trình diễn

Kết quả là:

| DESCRIP | JAN | FEB |
-----------------------
|    col1 |   A |   C |
|    col2 |   B |   A |
|    col3 |   0 |   G |
|    col4 |   B |   E |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách nhập tệp CSV vào bảng MySQL

  2. Cơ sở dữ liệu mẫu MySQL

  3. Làm cách nào để chọn toàn bộ hàng có ID lớn nhất trong bảng?

  4. MySQL 8 Biểu thức Bảng Phổ biến CTE

  5. Các truy vấn mysql động với sql thoát có an toàn như các câu lệnh đã chuẩn bị không?