Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySql sélectionne des valeurs de ligne dynamiques comme noms de colonne

À partir de l'approche de la question de référence consistant à utiliser group_concat vous pouvez le faire, mais notez une chose lorsque vos identifiants de travail augmentent par exec_id group puis group_concat approche ne sera pas optimale en raison de sa longueur par défaut de 1024 caractères à concaténer et pour vos colonnes dynamiques, cela dépassera sûrement cette limite, mais cette limite peut être augmentée comme mentionné dans 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