Mysql
 sql >> база данни >  >> RDS >> Mysql

Създайте обобщен изглед в MySQL, като завъртите ред в динамичен брой колони

Трябва да завъртите таблицата, но 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 иПОТРЕБИТЕЛСКА ДЕФИНИРАНА ПРОМЯНА

Надявам се това да помогне..



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Нямам достъп до базата данни mysql (изпълняваща се на AWS екземпляр) от моето java приложение

  2. MySQL:Игнорирайте избрана колона, когато използвате DISTINCT

  3. как да избера AVG от множество колони на един ред

  4. Как да получа ID на последния актуализиран ред в MySQL?

  5. как да сравним две mysql таблици в php