Множество способов ... одним из подходов для меня во многих приложениях на предыдущей работе было создание таблицы временных рамок.
id - Year - Month - StartStamp - End Stamp
1 - 2008 - January - 1/1/2008 00:00:00.000 - 1/31/2008 23:59:59.999
Тогда вы можете просто присоединиться к таблице таймфреймов, где ваше поле даты находится между начальной и конечной отметками.
Это облегчает получение определенного периода времени или всех периодов времени ...
Ваша может быть проще, всего 12 записей (т.е. 1 января) и присоединение к DATEPART (m, DateColumn)
select mon.monthNumber, mon.monthName,
count(a.*) as count1, count(b.*) as count2
from months mon
left join whatever1 a on DATEPART(m,a.Date) = mon.monthNumber
left join whatever2 b on DATEPART(m,b.Date) = mon.monthNumber
group by mon.monthNumber, mon.monthName
Вы могли бы также сделать случайную вещь месяца, например так:
select mon.monthNumber, mon.monthName,
count(a.*) as count1, count(b.*) as count2
from (
select 1 as monthNumber, 'January' as monthName
union
select 2 as monthNumber, 'February' as monthName
union
select 3 as monthNumber, 'March' as monthName
union
......etc.....
) mon
left join whatever1 a on DATEPART(m,a.Date) = mon.monthNumber
left join whatever2 b on DATEPART(m,b.Date) = mon.monthNumber
group by mon.monthNumber, mon.monthName