Hi Everyone - Below is my query which is erroring out. Need your help to fix this. Thanks

Select *, (AverageSpend/CASE WHEN @year = YEAR(GETDATE()) THEN MONTH(GETDATE()) ELSE 12 END )*12 as annual,
concat((AverageSpend/cast(AnnualCap as float)) * 100,'%' ) as AnnualCapSpentPercent,
concat((AverageDaystomeetcap/cast(NumberofPatientsMetCap as float)) * 100,'%' ) as PercentPatientsMetAnnualCap

	 from #DollarCapExecutive  
			 

Hi @kkran ,

The reason for this error is that your divisor contains 0.According to the data you provided, the value of NumberofPatientsMetCap contains 0. Therefore, as DanGuzman said, the value of NumberofPatientsMetCap contains 0 which caused an error.For this problem, you can refer to the following three solutions:
Method 1: SQL NULLIF Function

    create table #DollarCapExecutive  
    (Prgld int,AverageSpend float,AnnualCap int,AverageDaystomeetcap int,NumberofPatientsMetCap int)  
    insert into  #DollarCapExecutive values(10112,108.35,2000,6,5),(10112,2071.90,35000,136,1),  
    (10112,805.62,35000,0,0),(10112,1059.44,15000,0,0),(10112,48.74,300,12,18)  
    Select --(AverageSpend/CASE WHEN year = YEAR(GETDATE()) THEN MONTH(GETDATE()) ELSE 12 END ) as annual,  
    concat((AverageSpend/cast(AnnualCap as float))* 100,'%' ) as AnnualCapSpentPercent,  
    concat((AverageDaystomeetcap/cast(nullif(NumberofPatientsMetCap,0) as float)) *100,'%' ) as PercentPatientsMetAnnualCap  
    from #DollarCapExecutive  
    drop table #DollarCapExecutive  

Output:

AnnualCapSpentPercent PercentPatientsMetAnnualCap  
5.4175% 120%  
5.91971% 13600%  
2.30177% %  
7.06293% %  
16.2467% 66.6667%    

Method 2: Using CASE statement to avoid divide by zero error

Select --(AverageSpend/CASE WHEN year = YEAR(GETDATE()) THEN MONTH(GETDATE()) ELSE 12 END ) as annual,  
concat((AverageSpend/cast(AnnualCap as float))*100,'%' ) as AnnualCapSpentPercent,  
case when NumberofPatientsMetCap=0 then null else  
concat((AverageDaystomeetcap/cast(NumberofPatientsMetCap as float))*100,'%') end as PercentPatientsMetAnnualCap  
from #DollarCapExecutive  

Output:

AnnualCapSpentPercent PercentPatientsMetAnnualCap  
5.4175% 120%  
5.91971% 13600%  
2.30177% NULL  
7.06293% NULL  
16.2467% 66.6667%  

Method 3: SET ARITHABORT OFF
For details, please refer to the following article.
This method may cause performance problems, if not necessary, it is best to choose the first two methods

Methods to avoid the SQL divide by zero error

If you have any question, please feel free to let me know.
If the response is helpful, please click "Accept Answer" and upvote it.

Regards

If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.

It seems you have zero values for NumberOfPatientsMetCap so the percent calculation fails with the error. One way to avoid the error is with NULLIF(NumberOfPatientsMetCap ,0) to coerce a NULL value. The result after the CONCAT will be '%' with this method so you may also want to tweak the expression according to how you want to display it.