Хотя ответ Билла Карвина - правильный запрос, должен знать определенный набор столбцов, но для динамического сводного запроса существует способ взлома с помощью group_concat
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT
CONCAT('MAX(CASE WHEN `Type` = ''',
`Type`,
''' THEN Degignation END) `Type_',
`Type`,
'`'
)
)
INTO @sql
FROM t;
SET @sql = CONCAT('SELECT ID, ', @sql, ', Email
FROM t
GROUP BY ID,Email');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Однако, используя
blockquote>group_concat
, она имеет ограничение по умолчанию 1024 символа для конкатенации, а оставшийся результат будет усекается, поэтому, если у вас есть много разных типов, это будет сложно. Хотя вы можете увеличить предел для ограничения длиныgroup_concat
, как указано в руководстве, но также имеет зависимость отmax_allowed_packet