U moet de tabel draaien, maar mysql heeft niet zo'n functie van pivot
dus we moeten de functionaliteit repliceren
BEWERKT
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;
Resultaat
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
Er zijn 2 benaderingen om uw probleem op te lossen1. maak een casus voor elk jaar, wat in uw geval niet mogelijk is omdat we met jaar 2 te maken hebben. genereer de query dynamisch zodat we de juiste kolommen krijgen volgens uw behoefte.
Ik heb een oplossing gegeven volgens de tweede oplossing waar ik de query aan het genereren ben en opslaat in @sql
variabel. In de viool heb ik de inhoud van @sql
. afgedrukt voordat u het uitvoert.
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;
Voor meer informatie over group_concat()
ga door de linkGROUP_CONCAT
endoor de gebruiker gedefinieerde variabele
Ik hoop dat dit helpt..