SELECT m.[name],
SUM(CASE WHEN state = 'good' THEN 1 ELSE 0 END) AS [good],
SUM(CASE WHEN state = 'very good' THEN 1 ELSE 0 END) AS [very good],
SUM(CASE WHEN state = 'bad' THEN 1 ELSE 0 END) AS [bad]
FROM [month] m
INNER JOIN [task table] t
ON t.month_id = m.id
GROUP BY [name]
------------------------------------------------------------------------------------------------------
SQL Server MVP
http://visakhm.blogspot.com/