sql >> Database >  >> RDS >> Mysql

MySql selecteert dynamische rijwaarden als kolomnamen

Vanaf de benadering van de referentievraag voor het gebruik van group_concat u kunt dit doen, maar let op één ding, aangezien uw taak-ID's toenemen per exec_id groep en vervolgens group_concat benadering zal niet optimaal zijn vanwege de standaardlengte van 1024 tekens om samen te voegen en voor uw dynamische kolommen zal dit zeker die limiet overschrijden, maar deze limiet kan worden verhoogd zoals vermeld 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



  1. Wat is ISO_year in sql-server

  2. Exporteer tabel naar bestand met kolomkoppen (kolomnamen) met behulp van het bcp-hulpprogramma en SQL Server 2008

  3. Getallen opmaken door opvulling met voorloopnullen in SQL Server

  4. SQL Server:hoe orakel na te bootsen om de vraag met dichte_rank te behouden?