Try this query:
SELECT Name
,GROUP_CONCAT(CASE WHEN Date = 11 THEN hours ELSE NULL END) AS `11`
,GROUP_CONCAT(CASE WHEN Date = 12 THEN hours ELSE NULL END) AS `12`
,GROUP_CONCAT(CASE WHEN Date = 13 THEN hours ELSE NULL END) AS `13`
FROM days
GROUP BY Name
You can also use this dynamic query for the same:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'GROUP_CONCAT(CASE WHEN `Date` = ''',
`Date`,
''' THEN hours ELSE NULL END) AS `',
`Date`, '`'
)
) INTO @sql
FROM Days;
SET @sql = CONCAT('SELECT Name, ', @sql,'
FROM Days
GROUP BY Name
');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Output:
| NAME | 11 | 12 | 13 |
---------------------------------------
| john | 10:00 | 13:00 | 16:00 |
| peter | 12:00,11:00 | 9:00 | 10:00 |