BEGIN DROP table if exists attendeesWithCustomFields; SET @sql = NULL; SELECT GROUP_CONCAT( DISTINCT CONCAT( 'MIN(CASE WHEN cf.field_name = ''', field_name, ''' THEN cf.field_value END) AS ', field_name ) ) INTO @sql FROM custom_fields; SET @sql = CONCAT( 'CREATE TABLE attendeesWithCustomFields SELECT a.* , ', @sql , ' FROM attendees a LEFT JOIN custom_fields AS cf ON cf.event_id = a.event_id AND cf.investor_id = a.investor_id GROUP BY a.event_id, a.investor_id ' ); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; END