Potřebujete pivotovat tabulku, ale mysql žádnou takovou funkci pivot nemá
takže musíme replikovat jeho funkčnost
UPRAVENO
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;
Výsledek
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
Existují 2 přístupy k vyřešení vašeho problému1. vytvořit případ pro každý rok, což ve vašem případě není možné, protože se zabýváme rokem2. generujte dotaz dynamicky, abychom získali správné sloupce podle vašich potřeb.
Dal jsem řešení podle druhého řešení, kde generuji dotaz a ukládám jej do @sql
variabilní. V housle jsem vytiskl obsah @sql
před jeho provedením.
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;
Další informace týkající se group_concat()
přejděte na odkazGROUP_CONCAT
aPROMĚNNÁ DEFINOVANÁ UŽIVATELEM
Doufám, že to pomůže..