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

MySql избира динамични стойности на редове като имена на колони

От подхода на референтния въпрос за използване на group_concat можете да го направите, но имайте предвид едно нещо, тъй като вашите идентификационни номера на работа се увеличават на exec_id група след това group_concat подходът няма да е оптимален поради неговата дължина по подразбиране от 1024 знака за конкатениране и за вашите динамични колони това със сигурност ще премине това ограничение, но това ограничение може да бъде увеличено, както е посочено в documentation

SET @sql = NULL;

SELECT GROUP_CONCAT(DISTINCT
  CONCAT('MAX(CASE WHEN job_id = ''',
         job_id, 
         ''' THEN start_time END) `',
         job_id,
         '_start`',
         ',',
         'MAX(CASE WHEN job_id = ''',
         job_id,
         ''' THEN end_time END) `',
         job_id,
         '_end`' 
         )

 )
  INTO @sql
  FROM t;

SET @sql = CONCAT('SELECT exec_id, ', @sql, ' 
                     FROM t 
                    GROUP BY exec_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Fiddle Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Анализирайте CSV и експортирайте в Mysql база данни в Grails

  2. Случай на MySQL в оператор Select с оператор LIKE

  3. MySQL - как да съхранявам време с правилна часова зона? (от Java)

  4. Неправилна стойност на цяло число:'' за колона 'id' на ред 1

  5. Често срещаната грешка в MySQL:„Има грешка при четене на комуникационен пакет“