SQL GROUP BY с COUNTS - как всегда возвращать строку, когда число равно 0 - PullRequest
2 голосов
/ 07 декабря 2010

Исходя из моего предыдущего вопроса , у меня теперь есть следующий SQL:

SELECT CONVERT(VARCHAR(10), Date, 120) AS Date, 
       COUNT(*)                        AS Total, 
       COUNT(CASE 
               WHEN ErrorCode = -2 THEN 1 
             END)                      AS TimeOutErrors, 
       COUNT(CASE 
               WHEN ErrorCode IS NOT NULL THEN 1 
             END)                      AS TotalErrors 
FROM   Table 
WHERE  Type = 7 
       AND Date = CONVERT(VARCHAR(10), Dateadd(d, -1, Getdate()), 120) 
GROUP  BY Date

, который возвращает все записи типа 7 за вчерашний день с количеством ошибок -2 иобщее количество ошибок.

Однако, это возвращает 0 строк, если за вчерашний день нет записей типа 7

Можно ли заставить его вернуть все 0, если это так?

т.е.:

Date       Total TimeOutErrors TotalErrors
---------- ----- ------------- -----------
2010-12-06 0     0             0

bcp анализирует этот запрос для ежедневного сохранения в файле журнала с помощью агента SQL

1 Ответ

3 голосов
/ 07 декабря 2010

Вам нужно OUTER JOIN

...
FROM   
(SELECT CONVERT(VARCHAR(10), Dateadd(d, -1, Getdate()), 120) AS [Date]) D
LEFT OUTER JOIN Table T
ON  D.[Date] = T.[Date]  AND T.Type = 7
GROUP BY D.[Date]
...