Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySql seleciona valores de linha dinâmicos como nomes de coluna


A partir da abordagem da questão de referência de usar group_concat você pode fazer isso, mas observe uma coisa à medida que seus IDs de trabalho aumentam por exec_id grupo então group_concat abordagem não será ideal devido ao seu comprimento padrão de 1024 caracteres para concatenar e para suas colunas dinâmicas isso certamente ultrapassará esse limite, mas esse limite pode ser aumentado conforme mencionado em 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