Sql server 使用带有空值的SQL执行一些加法函数,但不将其设为0
我用SQL做了一些复杂的加法运算: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
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吗?