Du skal pivotere tabellen, men mysql har ikke sådan en pivotfunktion
så vi er nødt til at replikere dens funktionalitet
REDIGERET
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;
Resultat
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL FIDDLE
Der er 2 tilgange til at løse dit problem1. oprette sag for hvert år, hvilket ikke er muligt i dit tilfælde, da vi har at gøre med år2. generer forespørgslen dynamisk, så vi får de rigtige kolonner efter dit behov.
Jeg har givet løsning i henhold til den anden løsning, hvor jeg genererer forespørgslen og gemmer den i @sql
variabel. I violinen har jeg printet indholdet af @sql
før den udføres.
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;
For mere information om group_concat()
gå gennem linketGROUP_CONCAT
ogBRUGERDEFINERET VARIABEL
Håber dette hjælper..