Bạn cần xoay bảng nhưng mysql không có bất kỳ chức năng nào như vậy của pivot
vì vậy chúng tôi cần tái tạo chức năng của nó
ĐÃ CHỈNH SỬA
Select
group_concat(
DISTINCT
if(year is null,
CONCAT('max(if (year is null, state, 0)) as ''NULL'' '),
CONCAT('max(if (year=''', year, ''', state, 0)) as ''',year, ''' '))
) into @sql from tbl join (SELECT @sql:='')a;
set @sql = concat('select company_name, ', @sql, 'from tbl group by company_name;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
Kết quả
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
Có 2 cách tiếp cận để giải quyết vấn đề của bạn1. tạo trường hợp cho mỗi năm, điều này không thể thực hiện được trong trường hợp của bạn vì chúng tôi đang giải quyết năm 2. tạo truy vấn động để chúng tôi nhận được các cột phù hợp theo nhu cầu của bạn.
Tôi đã đưa ra giải pháp theo giải pháp thứ hai trong đó tôi đang tạo truy vấn và lưu trữ nó trong @sql
Biến đổi. Trong máy in, tôi đã in nội dung của @sql
trước khi thực hiện nó.
select company_name, max(if (year='2008', state, 0)) as '2008' ,max(if (year='2009', state, 0)) as '2009' ,max(if (year='2010', state, 0)) as '2010' ,max(if (year is null, state, 0)) as 'NULL' from tbl group by company_name;
Để biết thêm thông tin về group_concat()
đi qua liên kết GROUP_CONCAT
và BIẾN SỐ ĐỊNH NGHĨA CỦA NGƯỜI DÙNG
Hy vọng điều này sẽ giúp ..