Anda perlu memutar tabel tetapi mysql tidak memiliki fungsi pivot seperti itu
jadi kita perlu mereplikasi fungsinya
DIEDIT
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;
Hasil
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
Ada 2 pendekatan untuk memecahkan masalah Anda1. buat kasus untuk setiap tahun, yang tidak mungkin dalam kasus Anda karena kita berurusan dengan tahun2. buat kueri secara dinamis sehingga kami mendapatkan kolom yang tepat sesuai kebutuhan Anda.
Saya telah memberikan solusi sesuai dengan solusi kedua di mana saya membuat kueri dan menyimpannya di @sql
variabel. Di biola saya telah mencetak konten @sql
sebelum menjalankannya.
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;
Untuk informasi lebih lanjut mengenai group_concat()
buka tautanGROUP_CONCAT
danVARIABEL DEFINISI PENGGUNA
Semoga membantu..