Question

I do some complicated addition Math in 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

some of the value has Null value, so the addition won't work , and it became null. I want still process the addition without make the null to 0 , is it possible ?

Was it helpful?

Solution

Arithmetic operations on NULL returns NULL, so if you want to return a value and ignore NULL, you will have to replace NULL to 0. Using ISNULL standard SQL function (example: ISNULL(<expression>, 0)) can replace NULL with 0.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top