テーブルをピボットする必要がありますが、mysqlにはそのようなピボットの機能はありません
そのため、その機能を複製する必要があります
編集済み
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;
結果
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
問題を解決するには2つのアプローチがあります1。毎年ケースを作成します。これは、year2を扱っているため、あなたのケースでは不可能です。クエリを動的に生成して、必要に応じて適切な列を取得できるようにします。
クエリを生成して@sql
に保存する2番目のソリューションに従って、ソリューションを提供しました。 変数。フィドルでは、@sql
の内容を印刷しました 実行する前に。
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;
group_concat()
の詳細については リンクをたどる
これがお役に立てば幸いです。