Трябва да завъртите таблицата, но mysql няма такава функционалност на pivot
така че трябва да повторим неговата функционалност
РЕДАКТИРАНО
Изберете group_concat( DISTINCT if(годината е нула, CONCAT('max(if (годината е null, състояние, 0)) като ''NULL'' '), CONCAT('max(if (year=''', година, ''', състояние, 0)) като ''',година, ''' )) ) в @sql от tbl join (SELECT @sql:='')a;set @sql =concat('изберете име_на_компания, ', @sql, 'от tbl група по име_на_компания;');ПРИГОТОВЯТЕ stmt ОТ @sql;ИЗПЪЛНАЙТЕ stmt;
Резултат
<предварителен код>| COMPANY_NAME | 2008 г. | 2009 г. | 2010 г. | NULL |-----------------------------------------------------| компания A | 1 | 0 | 0 | 0 || компания B | 0 | 2 | 0 | 0 || компанияC | 0 | 0 | 3 | 3 |SQL FIDDLE
Има 2 подхода за решаване на вашия проблем1. създайте случай за всяка година, което не е възможно във вашия случай, тъй като ние имаме работа с year2. генерирайте заявката динамично, така че да получим правилни колони според вашите нужди.
Дадох решение според второто решение, където генерирам заявката и я съхранявам в @sql
променлива. Във цигулката съм отпечатал съдържанието на @sql
преди да го изпълните.
изберете име_на_компания, max(if (year='2008', state, 0)) като '2008' ,max(if (year='2009', state, 0)) като '2009' ,max (if (year='2010', state, 0)) като '2010' ,max(if (year is null, state, 0)) като 'NULL' от tbl group от company_name;
За повече информация относно group_concat()
преминете през връзкатаGROUP_CONCAT
иПОТРЕБИТЕЛСКА ДЕФИНИРАНА ПРОМЯНА
Надявам се това да помогне..