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

SQL заявка за повторно изграждане на таблица, като се използват нейните динамични данни от редове за имена на колони

Това е основно PIVOT но MySQL няма функция PIVOT. Така че ще искате да копирате това с помощта на агрегатна функция и CASE изявление. Ако знаете номера на Grant стойности, които имате, тогава можете да кодирате твърдо заявката, подобно на това:

изберете месец, сума (случай, когато `grant`='DOE' след това междинна сума else 0 край) DOE, сума (случай, когато `grant`='Hatch' след това междинна сума else 0 край) Hatch, sum(case когато `grant`='NIH' тогава междинна сума else 0 край) NIH, сума (случай, когато `grant`='NSF' след това междинна сума else 0 край) NSF, сума (случай, когато `grant`='Друго' тогава междинна сума else 0 край) Друго, сума (случай, когато `grant`='State' тогава междинна сума else 0 край) Състояние от вашата група таблици по месец 

Вижте SQL Fiddle с демонстрация

Сега, ако имате неизвестен брой стойности за Grant , тогава можете да използвате подготвен израз, за ​​да генерирате динамична версия на тази заявка:

SET @sql =NULL;SELECT GROUP_CONCAT(DISTINCT CONCAT( 'sum(case when `Grant` =''', `Grant`, ''' then Subtotal else 0 end) AS `', `Grant `, '`' ) ) INTO @sqlFROM yourtable;SET @sql =CONCAT('SELECT month, ', @sql, ' FROM yourtable group by months');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt; 

Вижте SQL Fiddle с демонстрация

И двете дават един и същ резултат:

<предварителен код>| МЕСЕЦ | ЛЮК | NIH | NSF | ДРУГИ | DOE | ДЪРЖАВА |------------------------------------------------ ------------------| ноември-2012 | 144,56 | 240,9 | 100,7 | 276,67 | 0 | 0 || октомври-2012 | 321,54 | 0 | 234,53 | 312,35 | 214.35 | 0 || септември-2012 | 147,99 | 0 | 156,89 | 245,67 | 0 | 148.66 |



  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

  2. entity framework 4 unicode проблем със запазване

  3. Външни ключове - Какво правят за мен?

  4. Ruby и MySQL UTF-8 знаци

  5. Как да скрия съхранената процедура на mysql