Contando registros por ano e mês, incluindo contagem zero
Estou usando um servidor SQL Server Compact Edition e quero contar o número de comentários por mês que correspondem a um determinado tutorial dentro de um intervalo de datas e incluir meses com contagem zero. Sei que preciso ingressar em uma tabela "calendário" na minha tabela para contabilizar os meses ausentes, mas preciso de ajuda para a implementação correta.
Eu tenho uma tabela de todos os comentários de diferentes tutoriais. Essa tabela é chamada Comentários e as colunas que eu preciso são[Tutorial]
(nvarchar
) e[DateAdded]
(DateTime
)
Tutorial | DateAdded
---------+-------------
sample | 2013-09-02
sample | 2013-09-04
sample | 2013-09-12
sample | 2013-09-12
example | 2013-09-15
sample | 2013-09-16
sample | 2013-09-21
sample | 2013-09-30
sample | 2013-10-01
sample | 2013-11-11
sample | 2013-11-11
example | 2013-11-14
sample | 2013-11-15
sample | 2013-11-19
sample | 2013-11-21
sample | 2013-11-25
sample | 2014-02-04
sample | 2014-02-06
E eu tenho umCalendar
tabela que possui uma coluna de ano e mês da seguinte forma:
Year | Month
-----+------
2000 | 01
2000 | 02
. | .
. | .
. | .
2099 | 12
Se eu estivesse procurando a contagem mensal dos comentários da 'amostra' do ano passado (a partir de 14 de fevereiro de 2014), a saída ideal seria:
Tutorial | Year | Month | Count
---------+------+-------+------
sample | 2013 | 09 | 7
sample | 2013 | 10 | 1
sample | 2013 | 11 | 6
sample | 2013 | 12 | 0
sample | 2014 | 01 | 0
sample | 2014 | 02 | 2
Consegui descobrir como fazer a consulta a seguir, mas preciso dos meses que não têm comentários para retornar 0 também.
SELECT
Tutorial,
datepart(year, DateAdded) AS Year,
datepart(month, DateAdded) AS Month,
COUNT(*) AS Count From Comments
WHERE
DateAdded > DATEADD(year,-1,GETDATE())
AND
Tutorial='sample'
GROUP BY
Tutorial,
datepart(year, DateAdded),
datepart(month, DateAdded)
Saída usando dados de amostra de cima.
Tutorial | Year | Month | Count
---------+------+-------+------
sample | 2013 | 09 | 7
sample | 2013 | 10 | 1
sample | 2013 | 11 | 6
sample | 2014 | 02 | 2
Eu sei que preciso ingressar nas tabelas, mas não consigo descobrir qual associação usar ou como implementá-la corretamente. Lembre-se de que isso é para o SQL Server CE, portanto nem todos os comandos do SQL Server podem ser usados.
Muito obrigado antecipadamente!