Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySql wählt dynamische Zeilenwerte als Spaltennamen aus

Aus dem Ansatz der Referenzfrage, group_concat zu verwenden Sie können dies tun, aber beachten Sie eine Sache, da Ihre Job-IDs pro exec_id zunehmen group dann group_concat Ansatz wird aufgrund seiner Standardlänge von 1024 Zeichen zum Verketten nicht optimal sein, und für Ihre dynamischen Spalten wird dies sicherlich diese Grenze überschreiten, aber diese Grenze kann erhöht werden, wie in 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