Следующий запрос отлично работает за пределами него, все еще возвращает нулевые значения как NULL
вместо 0
. В частности, это суммирует количество случаев, когда что-то произошло в указанном диапазоне дат. Если значение просто не существует в параметрах (то есть NULL
,), то для удобства чтения я бы хотел, чтобы он возвращал 0 (таблица, которая является объединением нескольких временных таблиц, содержит только целые числа). Я исследовал и нашел этот случай «How can I change NULL to 0 when getting a single value from a SQL function?» и попробовал все предложения там, в том числе COALESCE
.ISNULL() не работает ... возможно неправильное размещение?
(SELECT tn.teamtext, tn.teamid, ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,ca.dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end, 0)), 0) AS cnt3
FROM teamnames AS tn
LEFT OUTER JOIN caseaudit AS ca
ON tn.teamID = ca.referteamID2
WHERE ca.referteamid1 <> ca.referteamid2 AND ca.isactive = 1 AND ca.groupid = 18 AND ca.accountid = 2 AND ca.referteamid1 = 31 AND ca.auditnote <> 'Suspend Case'
GROUP BY tn.teamtext, tn.teamid) AS c
Чтобы дать представление о том, возвращаемой таблицы Я смотрю, здесь:
4H BOSS 55 59 3
4H BSG 0 3 2
4H SALES AND MKTG 0 0 0
ACCOUNTS RECEIVABLE 0 0 0
ASSET MANAGEMENT 9 16 0
AUDIT 0 0 NULL
BOSS 4 5 0
CORPORATE BSG 0 7 5
CUSTOMER SUPPORT 87 133 NULL
NETWORK ENGINEERING 11 15 0
PRODUCTION ENGINEERING 116 142 5
PRODUCTION OPERATIONS 0 1 0
SECURITY 2 6 3
SNFAL PRODUCT TEAM 0 14 11
VOICE SERVICES 18 21 0
XEROX 4 8 0
где dModLast, исходящий? caseaudit? – Diego
Да. все происходит из таблицы caseaudit, за исключением командного текста и teamid. Извините, я добавлю псевдонимы. –
, который rdbms? что isnull, обертывающее функцию sum, не должно допускать, чтобы эти нули могли пройти. Все в этом случае утверждение не имеет значения ... – dotjoe