2016-04-06 5 views
0

Я пишу функцию для вычисления общего количества писем, полученных в каждом месяце. Но использование функции «Группа по DATEADD» получает только значения счетчика non o. Мне нужно получить все значения в пределах 0 отсчетов.Как сделать группу By с DATEADD для требуемого результата

ВЫБОР (МАКС (ReceivedMonthofYear) +»«+ MAX (ReceivedYear)) А.С. MonthStartDate, COUNT (ReceivedDateTime) КАК MonthlyTotal ОТ tblMessageReceived GROUP BY DATEADD (месяц, DATEDIFF (месяц, 0, ReceivedDateTime), 0)

в результате запроса Out put of the query

на самом деле я хочу, чтобы получить выход из всех значений в заданном диапазоне от 0 с и подсчета значений и месяцы также.

Спасибо!

+0

Вам нужен 'date' таблицу, содержащую все доступные даты. – sagi

+0

@sagi Использование таблицы DATE, как это сделать. При использовании таблицы DATE Left OUTERJOIN с tblMessageReceived. –

+0

Когда у вас есть таблица дат, выберите ее и левую присоединиться к вашему запросу и используйте ISNULL для замены нуля 0 – sagi

ответ

1
SELECT td.monthCol+' '+td.yearCol AS MonthStartDate, 
     isnull(MonthlyTotal,0) AS MonthlyTotal 
FROM tblDates td 
LEFT OUTER JOIN (SELECT (MAX(ReceivedMonthofYear)+' '+MAX(ReceivedYear)) AS MonthStartDate, 
         COUNT(ReceivedDateTime) AS MonthlyTotal 
       FROM tblMessageReceived 
       GROUP BY DATEADD(month, DATEDIFF(month, 0, ReceivedDateTime), 0)) tm 
ON (td.monthCol+' '+td.yearCol = tm.MonthStartDate) 

Попробуйте заменить MonthCol и YearCol с именами столбцов таблицы даты

+0

Спасибо за вашу помощь. –