Q&A for professional and enthusiast programmers
SELECT DATEADD(MONTH, M, 0) AS Month, ( 1 - GROUPING(M) ) * SUM(IIF(VoteTypeId = 2, 1, 0)) AS UpVotes, ( 1 - GROUPING(M) ) * SUM(IIF(VoteTypeId = 3, 1, 0)) AS DownVotes FROM Votes CROSS APPLY (VALUES (DATEDIFF(MONTH, 0, CreationDate))) V(M) WHERE VoteTypeId IN ( 2, 3 ) AND CreationDate >= '2000-01-01' AND CreationDate < '2020-12-31' GROUP BY GROUPING SETS ( ( ), ( M ) )