Sie müssen die Tabelle pivotieren, aber mysql hat keine solche Funktion von pivot
also müssen wir seine Funktionalität replizieren
BEARBEITET
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;
Ergebnis
| COMPANY_NAME | 2008 | 2009 | 2010 | NULL |
--------------------------------------------
| companyA | 1 | 0 | 0 | 0 |
| companyB | 0 | 2 | 0 | 0 |
| companyC | 0 | 0 | 3 | 3 |
SQL-FIDDLE
Es gibt 2 Ansätze zur Lösung Ihres Problems1. Fall für jedes Jahr erstellen, was in Ihrem Fall nicht möglich ist, da wir es mit Jahr2 zu tun haben. Generieren Sie die Abfrage dynamisch, damit wir die richtigen Spalten gemäß Ihren Anforderungen erhalten.
Ich habe eine Lösung gemäß der zweiten Lösung angegeben, bei der ich die Abfrage erzeuge und in @sql
speichere Variable. In der Geige habe ich den Inhalt von @sql
gedruckt vor der Ausführung.
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;
Weitere Informationen zu group_concat()
Gehen Sie über den Link GROUP_CONCAT
und BENUTZERDEFINIERTE VARIABLE
Hoffe das hilft..