Как получить нулевые значения для результата запроса, сгруппированного по месяцам, если он не содержит записей - PullRequest
1 голос
/ 28 ноября 2011

У меня есть IP-адрес, адрес электронной почты и дата в таблице. Мне нужно выяснить, сколько писем было отправлено (сгруппированы по IP и электронной почте вместе) в течение каждого месяца каждого года (поэтому группируйте по месяцам и годам). Сложность в том, что если письмо не было отправлено, мне нужно получить нулевое значение для результатов (теперь я не получаю пустых строк). Как я могу это сделать?

Select distinct X.Sender, X.IP, MONTH(s.date) as Month, YEAR (s.date) as Year, Count(s.ID)
From
(
    Select TOP 10 a.Sender, a.SenderIP as IP, COUNT(a.ID) as C
    From AMA a Where a.Summary = 'SPAM' 
    Group by a.Sender, a.SenderIP 
    Order by C desc
)As X left outer join AMAs
on X.Sender = s.Sender and X.IP = s.SenderIP 
Where s.Summary = 'SPAM' 
Group by X.Sender, X.IP, YEAR(s.date), MONTH(s.date)
Order by X.Sender,X.IP,YEAR(s.date) asc, Month(s.date) asc`

1 Ответ

0 голосов
/ 29 ноября 2011

Способ сделать это - OUTER JOIN из набора месяцев в существующий набор результатов.Таким образом будут присутствовать все месяцы с данными, а любые месяцы без данных будут иметь пустые значения.

Вы можете создать таблицу с этой информацией или использовать CTE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...