Đô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.