sql >> Base de Datos >  >> RDS >> Mysql

MySql selecciona valores de fila dinámicos como nombres de columna

A partir del enfoque de la pregunta de referencia de usar group_concat puede hacerlo, pero tenga en cuenta una cosa a medida que sus ID de trabajo aumentan por exec_id grupo entonces group_concat El enfoque no será óptimo debido a su longitud predeterminada de 1024 caracteres para concatenar y para sus columnas dinámicas esto seguramente cruzará ese límite, pero este límite se puede aumentar como se menciona en 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