Так как вы работаете с реляционной базой данных, то набор столбцов (a,b,c,d) должен быть определен заранее.
Сходу могу предложить такой способ решения вашей задачи:
SELECT
t.date,
SUM(t.a),
SUM(t.b)
FROM
(
SELECT `date`, cnt AS a, 0 AS b
FROM
`table`
WHERE `name` = 'a'
UNION
SELECT `date`, 0 AS a, cnt AS b
FROM
`table`
WHERE `name` = 'b'
) t
GROUP BY t.date
В принципе для c,d,e и т.д. можно до-генерировать запрос автоматически. Но работать такой запрос будет не очень быстро. Для какой нибудь админки куда заходят раз в день посмотреть отчет — нормально. Для часто посещаемой страницы возможно стоит пересмотреть логику?