sql >> Database teknologi >  >> RDS >> Mysql

MySql vælger dynamiske rækkeværdier som kolonnenavne

Fra referencespørgsmålets tilgang til at bruge group_concat du kan gøre det, men bemærk én ting, da dine job-id'er stiger pr. exec_id gruppe og derefter group_concat tilgang vil ikke være optimal på grund af dens standardlængde på 1024 tegn til sammenkædning, og for dine dynamiske kolonner vil dette helt sikkert krydse denne grænse, men denne grænse kan øges som nævnt i 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. Hvordan viser fora dig ulæste emner?

  2. Sådan fremskyndes SQL-forespørgsler

  3. mysqld_safe Directory '/var/run/mysqld' for UNIX socket fil eksisterer ikke

  4. Forbind SQL Server til SugarCRM