Please start any new threads on our new site at https://forums.sqlteam.com. We've got lots of great SQL Server experts to answer whatever question you can come up with.

 All Forums
 General SQL Server Forums
 New to SQL Server Programming
 Division by zero error?

Author  Topic 

jmersing
Yak Posting Veteran

57 Posts

Posted - 2010-10-06 : 14:29:24
Not sure what the best method would be to prevent a div by zero error message I'm getting, this is the part of the sql that is casuing it:

Sum(FORECASTTIMESERIES.AHT1*FORECASTTIMESERIES.CALLVOLUME1)+ (FORECASTTIMESERIES.AHT2*FORECASTTIMESERIES.CALLVOLUME2)+ (FORECASTTIMESERIES.AHT3*FORECASTTIMESERIES.CALLVOLUME3)+ (FORECASTTIMESERIES.AHT4*FORECASTTIMESERIES.CALLVOLUME4)+ (FORECASTTIMESERIES.AHT5*FORECASTTIMESERIES.CALLVOLUME5)+ (FORECASTTIMESERIES.AHT6*FORECASTTIMESERIES.CALLVOLUME6)+ (FORECASTTIMESERIES.AHT7*FORECASTTIMESERIES.CALLVOLUME7)+ (FORECASTTIMESERIES.AHT8*FORECASTTIMESERIES.CALLVOLUME8)+ (FORECASTTIMESERIES.AHT9*FORECASTTIMESERIES.CALLVOLUME9)+ (FORECASTTIMESERIES.AHT10*FORECASTTIMESERIES.CALLVOLUME10)+ (FORECASTTIMESERIES.AHT11*FORECASTTIMESERIES.CALLVOLUME11)+ (FORECASTTIMESERIES.AHT12*FORECASTTIMESERIES.CALLVOLUME12)+ (FORECASTTIMESERIES.AHT13*FORECASTTIMESERIES.CALLVOLUME13)+ (FORECASTTIMESERIES.AHT14*FORECASTTIMESERIES.CALLVOLUME14)+ (FORECASTTIMESERIES.AHT15*FORECASTTIMESERIES.CALLVOLUME15)+ (FORECASTTIMESERIES.AHT16*FORECASTTIMESERIES.CALLVOLUME16)+ (FORECASTTIMESERIES.AHT17*FORECASTTIMESERIES.CALLVOLUME17)+ (FORECASTTIMESERIES.AHT18*FORECASTTIMESERIES.CALLVOLUME18)+ (FORECASTTIMESERIES.AHT19*FORECASTTIMESERIES.CALLVOLUME19)+ (FORECASTTIMESERIES.AHT20*FORECASTTIMESERIES.CALLVOLUME20)/
sum(FORECASTTIMESERIES.CALLVOLUME1)+ (FORECASTTIMESERIES.CALLVOLUME2)+ (FORECASTTIMESERIES.CALLVOLUME3)+ (FORECASTTIMESERIES.CALLVOLUME4)+ (FORECASTTIMESERIES.CALLVOLUME5)+ (FORECASTTIMESERIES.CALLVOLUME6)+ (FORECASTTIMESERIES.CALLVOLUME7)+ (FORECASTTIMESERIES.CALLVOLUME8)+ (FORECASTTIMESERIES.CALLVOLUME9)+ (FORECASTTIMESERIES.CALLVOLUME10)+ (FORECASTTIMESERIES.CALLVOLUME11)+ (FORECASTTIMESERIES.CALLVOLUME12)+ (FORECASTTIMESERIES.CALLVOLUME13)+ (FORECASTTIMESERIES.CALLVOLUME14)+ (FORECASTTIMESERIES.CALLVOLUME15)+ (FORECASTTIMESERIES.CALLVOLUME16)+ (FORECASTTIMESERIES.CALLVOLUME17)+ (FORECASTTIMESERIES.CALLVOLUME18)+ (FORECASTTIMESERIES.CALLVOLUME19)+ (FORECASTTIMESERIES.CALLVOLUME20) As AHT2

tkizer
Almighty SQL Goddess

38200 Posts

Posted - 2010-10-06 : 14:52:49
Ouch, my eyes hurt.

You can use CASE to avoid the error.

Tara Kizer
Microsoft MVP for Windows Server System - SQL Server
http://weblogs.sqlteam.com/tarad/

Subscribe to my blog
Go to Top of Page

jmersing
Yak Posting Veteran

57 Posts

Posted - 2010-10-06 : 15:14:19
NOt exactly sure how to do that. I would typically run this in MS Access and use iiF.
Go to Top of Page

TG
Master Smack Fu Yak Hacker

6065 Posts

Posted - 2010-10-06 : 15:18:46
CASE is a good method although you will have to repeat your denominator expression which will really make Tara's eyes hurt. An alternative is to wrap the denominator expression in a NULLIF function: nullif(<expr>, 0)
That will result in a NULL value rather than an error. If you prefer a "0" to NULL then you could nest the entire expression in an ISNULL.
ie: ISNULL( <exp1> / NULLIF,<expr>,0)), 0)

CASE would be like:
case when <expr2> = 0 then 0 else <expr1>/<expr2> end

Be One with the Optimizer
TG
Go to Top of Page

jmersing
Yak Posting Veteran

57 Posts

Posted - 2010-10-06 : 15:40:04
A zero would work so I wanted to try the ISNULL function but i cant seem to get the syntax

simplified version i was trying:

ISNULL(Sum((FORECASTTIMESERIES.AHT1*FORECASTTIMESERIES.CALLVOLUME1)+ (FORECASTTIMESERIES.AHT2*FORECASTTIMESERIES.CALLVOLUME2))/Sum((FORECASTTIMESERIES.CALLVOLUME1)+ (FORECASTTIMESERIES.CALLVOLUME2)),0)

but it still tells me I have a divide by zero error
Go to Top of Page

TG
Master Smack Fu Yak Hacker

6065 Posts

Posted - 2010-10-06 : 15:47:48
you missed the NULLIF around the denominator.
ISNULL( <numeratorExpr> / NULLIF(<denominatorExpr>,0), 0)

Be One with the Optimizer
TG
Go to Top of Page

X002548
Not Just a Number

15586 Posts

Posted - 2010-10-06 : 15:57:02
That's one NORMALIZED Table

Brett

8-)

Hint: Want your questions answered fast? Follow the direction in this link
http://weblogs.sqlteam.com/brettk/archive/2005/05/25/5276.aspx


Want to help yourself?

http://msdn.microsoft.com/en-us/library/ms130214.aspx





Go to Top of Page

jmersing
Yak Posting Veteran

57 Posts

Posted - 2010-10-06 : 16:04:15
Now I understand - it works perfectly - Thank You!
Go to Top of Page

TG
Master Smack Fu Yak Hacker

6065 Posts

Posted - 2010-10-06 : 16:11:08
You're welcome!

You should take Brett's jibe to heart and think about normalizing your table. It's not a good design to have 20 flavors of each column.

Be One with the Optimizer
TG
Go to Top of Page
   

- Advertisement -