Подсчет записей по годам и месяцам, включая ноль
Я использую сервер SQL Server Compact Edition и хочу подсчитать количество комментариев в месяц, которые соответствуют определенному учебнику в пределах диапазона дат и включают месяцы с нулевым счетом. Я знаю, что мне нужно присоединить таблицу «календарь» к моей таблице, чтобы учесть пропущенные месяцы, но мне нужна помощь в правильной реализации этого.
У меня есть таблица всех комментариев из разных уроков. Эта таблица называется Комментарии, а нужные мне столбцы[Tutorial]
(nvarchar
) а также[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
И у меня естьCalendar
таблица со столбцом года и месяца выглядит так:
Year | Month
-----+------
2000 | 01
2000 | 02
. | .
. | .
. | .
2099 | 12
Если бы я искал ежемесячное количество «выборочных» комментариев за прошлый год (по состоянию на 14 февраля 2014 года), то идеальным результатом было бы:
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
Мне удалось выяснить, как выполнить следующий запрос, но мне нужны месяцы, у которых нет комментариев, чтобы также вернуть 0.
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)
Вывод с использованием примеров данных сверху.
Tutorial | Year | Month | Count
---------+------+-------+------
sample | 2013 | 09 | 7
sample | 2013 | 10 | 1
sample | 2013 | 11 | 6
sample | 2014 | 02 | 2
Я знаю, что мне нужно присоединиться к таблицам, но я не могу понять, какое объединение использовать или как правильно его реализовать. Помните, что это для SQL Server CE, поэтому не все команды из SQL Server могут быть использованы.
Большое спасибо заранее!