Devi ruotare la tabella ma mysql non ha tale funzionalità di pivot
quindi dobbiamo replicare la sua funzionalità
MODIFICATO
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;
Risultato
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
Ci sono 2 approcci per risolvere il tuo problema1. crea un caso per ogni anno, cosa che non è possibile nel tuo caso poiché abbiamo a che fare con l'anno2. genera la query in modo dinamico in modo da ottenere le colonne appropriate secondo le tue necessità.
Ho fornito una soluzione in base alla seconda soluzione in cui sto generando la query e memorizzandola in @sql
variabile. Nel violino ho stampato il contenuto di @sql
prima di eseguirlo.
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;
Per ulteriori informazioni su group_concat()
vai al linkGRUPPO_CONCAT
eVARIABILE DEFINITA DALL'UTENTE
Spero che questo aiuti..