Sql server 使用带有空值的SQL执行一些加法函数,但不将其设为0

Sql server 使用带有空值的SQL执行一些加法函数,但不将其设为0,sql-server,null,addition,Sql Server,Null,Addition,我用SQL做了一些复杂的加法运算: Select CAST((CAST(((COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) <= '12:59' AND CLOSE_BY <> '' AND CONVERT(varchar(5), closedate, 108) <= '15:00' THEN CLOSE_BY ELSE NULL END) * 100)/nullif(COUNT(CASE WHEN CONVERT

我用SQL做了一些复杂的加法运算:

Select CAST((CAST(((COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) <= '12:59' AND CLOSE_BY <> '' AND CONVERT(varchar(5), closedate, 108) <= '15:00' THEN CLOSE_BY ELSE NULL END) * 100)/nullif(COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) <= '12:59' THEN ReportDate ELSE NULL END),0)) as decimal(18,2))+ 
CAST(((COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) between '13:00' and '14:59' AND CLOSE_BY <> '' AND CONVERT(varchar(5), closedate, 108) <= '17:00' THEN CLOSE_BY ELSE NULL END) * 100)/nullif(COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) between '13:00' and '14:59' THEN ReportDate ELSE NULL END),0)) as decimal(18,2))+
CAST(((COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) between '15:00' and '16:59' AND CLOSE_BY <> '' AND CONVERT(varchar(5), closedate, 108) <= '19:00' THEN CLOSE_BY ELSE NULL END) * 100)/nullif(COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) between '15:00' and '16:59' THEN ReportDate ELSE NULL END),0)) as decimal(18,2))+ 
CAST(((COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) between '17:00' and '18:59' AND CLOSE_BY <> '' AND CONVERT(varchar(5), closedate, 108) <= '21:00' THEN CLOSE_BY ELSE NULL END) * 100)/nullif(COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) between '17:00' and '18:59' THEN ReportDate ELSE NULL END),0)) as decimal(18,2))+ 
CAST(((COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108)  >= '19:00' AND CLOSE_BY <> '' AND CONVERT(varchar(5), closedate, 108)  <= '23:59'  THEN CLOSE_BY ELSE NULL END) * 100)/nullif(COUNT(CASE WHEN CONVERT(varchar(5), ReportDate, 108) >= '18:00'  THEN ReportDate ELSE NULL END),0)) as decimal(18,2))) / 5  as decimal(18,2)) as Avg,  
 getdate() as generatedate FROM WO  
 WHERE contractor is not null and 
 contractor <> 'SYSTEM DEFAULT' and LEFT(SCA,1)<>'L' and LEFT(SCA,1)<>' '  
 and SCH_DATE between ( SELECT CONVERT(DATE , GETDATE() , 103)) and ( SELECT CONVERT(DATE , GETDATE() , 103))  GROUP BY CONTRACTOR,Branch order by CONTRACTOR asc

Select CAST(((COUNT(CASE)WHEN CONVERT(varchar(5),ReportDate,108)对
NULL
的算术运算返回NULL,因此如果要返回值并忽略
NULL
,则必须将
NULL
替换为0。使用
ISNULL
标准SQL函数(
示例:ISNULL(,0)
)可以将NULL替换为0。

对NULL的算术运算返回NULL,因此如果要返回一个值并忽略NULL,则必须将NULL替换为0。不能将未定义的内容添加到数字中…数学无法识别这一点。NULL+1=?您知道答案吗?因此我应该在这里更改逻辑,使查询只处理某个数字ing not null,是tsql中的AVG避免null吗?我可以在查询中使用AVG吗?