Если вы хотите динамически создать столбец, вы можете использовать динамический свод.
используйте GROUP_CONCAT
для создания сводного столбца, затем Concat синтаксиса выполнения SQL и динамического выполнения.
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'COALESCE(MAX(CASE WHEN sub = ''',
sub,
''' then ''y'' end),''n'') AS ',
sub
)
) INTO @sql
FROM T;
SET @sql = CONCAT('SELECT name, ', @sql, '
FROM T
GROUP BY name');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
sqlfiddle
Результат
name maths science history computer english
a y y y y y
b y y y n n
c y n y y n