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

Cách Unpivot Table trong MySQL

Đôi khi bạn cần chuyển các cột thành hàng hoặc hủy chia bảng trong MySQL. Vì MySQL không có chức năng UNPIVOT hoặc REVERSE PIVOT một bảng, bạn cần viết một truy vấn SQL để chuyển các cột thành các hàng. Đây là cách bỏ chia bảng trong MySQL.

Cách giải nén bảng trong MySQL

Giả sử bạn có bảng tổng hợp sau

mysql>create table data(id int, a varchar(255), b varchar(255), c varchar(255));
mysql>insert into data(id,a,b,c) values(1,'a1','b1','c1'),(2,'a1','b1','c1');
mysql>select * from data;

+------+------+------+------+
| id   | a    | b    | c    |
+------+------+------+------+
|    1 | a1   | b1   | c1   |
|    2 | a1   | b1   | c1   |
+------+------+------+------+

Giả sử bạn muốn hủy chia bảng trong MySQL để làm như sau.

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

Phần thưởng đọc:Cách tạo bảng tổng hợp động trong MySQL

Unpivot Table trong MySQL

Đây là truy vấn để thực hiện hủy chia trong SQL. Vì MySQL không cung cấp hàm UNPIVOT, bạn cần sử dụng mệnh đề UNION ALL để đảo ngược tổng hợp một bảng trong MySQL.

mysql> select id, 'a' col, a value
      from data
      union all
      select id, 'b' col, b value
      from data
      union all
      select id, 'c' col, c value
      from data;
+------+-----+-------+
| id   | col | value |
+------+-----+-------+
|    1 | a   | a1    |
|    2 | a   | a1    |
|    1 | b   | b1    |
|    2 | b   | b1    |
|    1 | c   | c1    |
|    2 | c   | c1    |
+------+-----+-------+

Trong truy vấn trên, về cơ bản, chúng tôi cắt bảng gốc thành 3 bảng nhỏ hơn - một bảng cho mỗi cột a, b, c và sau đó nối chúng bên dưới bảng kia bằng UNION ALL.

Nếu bạn muốn lọc các hàng, bạn có thể thêm mệnh đề WHERE như hình dưới đây

mysql> select id, 'a' col, a value
      from data
      WHERE condition
      union all
      select id, 'b' col, b value
      from data
      WHERE condition
      union all
      select id, 'c' col, c value
      from data
      WHERE condition;

Phần thưởng đã đọc:Cách chuyển hàng động thành cột trong MySQL

Thật không may, nó thật tẻ nhạt nhưng là một trong 2 cách duy nhất để giải nén trong MySQL. Cái còn lại liên quan đến việc thực hiện kết hợp chéo, như được hiển thị bên dưới.

mysql> select t.id,
       c.col,
       case c.col
         when 'a' then a
         when 'b' then b
         when 'c' then c
       end as data
     from data t
     cross join
     (
       select 'a' as col
       union all select 'b'
       union all select 'c'
     ) c;
+------+-----+------+
| id   | col | data |
+------+-----+------+
|    1 | a   | a1   |
|    2 | a   | a1   |
|    1 | b   | b1   |
|    2 | b   | b1   |
|    1 | c   | c1   |
|    2 | c   | c1   |
+------+-----+------+

Phần thưởng đọc:Cách tự động hóa các truy vấn Pivot Table trong MySQL

Bạn có thể tùy chỉnh truy vấn trên để hủy chia bảng trong MySQL, sử dụng mệnh đề WHERE. Bạn cũng có thể sử dụng công cụ báo cáo để vẽ kết quả trong bảng. Đây là ví dụ về một bảng được tạo bằng Ubiq.

Nếu bạn muốn tạo bảng tổng hợp, biểu đồ &trang tổng quan từ cơ sở dữ liệu MySQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL, Nối hai cột

  2. Cột Đổi tên MySQL

  3. Cách tìm kiếm từ phù hợp chính xác bằng MySql Query

  4. Truy vấn bảng tổng hợp MySQL với các cột động

  5. Danh sách các chỉ định định dạng ngày trong MySQL