?
Solved

Divide by zero error encountered.

Posted on 2009-05-08
5
Medium Priority
?
625 Views
Last Modified: 2012-05-06
I have a query that used to work just fine and now when i run it i get the message: Divide by zero error encountered.  I have checked my data and there are no zero values in the fields used as the denominator.  i don't understand how i can all of a sudden start getting this message.  Does anyone have any clue what could be wrong?  I have added a code segment of the procedure where the error is occuring.
Select
		PktCtrlNbr,
		Lane,
		LaneId,
		LaneInt,
		Wave,
		Case
			When PickArea = 'UN1' Then Ceiling(Sum(PickQty))
			Else
				0
		End	As Un1Qy,
		Case
			When PickArea = 'UN2' Then Ceiling(Sum(PickQty))
			Else
				0
		End	As Un2Qy,
		Case
			When PickArea = 'NCP' Then Ceiling(Sum(PickQty / PackQty))
			Else
				0
		End	As CpnQy,
		Case
			When PickArea = 'OCP' Then Ceiling(Sum(PickQty / PackQty))
			Else
				0
		End	As CpoQy,
		Case
			When PickArea = 'NCP' Or PickArea = 'OCP' Then Ceiling(Sum(PickQty / PackQty))
			Else
				0
		End	As CPQy,
		Case
			When PickArea = 'EOS' Or PickArea = 'COS' Or PickArea = 'NRS' Or
				 PickArea = 'ORS' Then Ceiling(Sum(PickQty / PackQty))
			Else
				0
		End	As RsvQy,
		Case
			When PickArea = 'EOS' Or PickArea = 'COS' Or PickArea = 'NRS' Or
				 PickArea = 'ORS' Then Ceiling(Sum(PackVol * (PickQty / PackQty)))
			Else
				0
		End	As RsvVl,
		Case
			When PickArea = 'UN1' Or PickArea = 'UN2' Then Ceiling(Sum(UnitWt * PickQty))
			When PickArea = 'NCP' Or PickArea = 'OCP' Or PickArea = 'EOS' Or
				  PickArea = 'COS' Or PickArea = 'NRS' Or PickArea = 'ORS' Then Ceiling(Sum(PackWt * (PickQty / PackQty)))
		End	As Weight,
		Case
			When PickArea = 'UN1' Or PickArea = 'UN2' Then Ceiling(Sum(UnitVol * PickQty))
			When PickArea = 'NCP' Or PickArea = 'OCP' Or PickArea = 'EOS' Or
				  PickArea = 'COS' Or PickArea = 'NRS' Or PickArea = 'ORS' Then Ceiling(Sum(PackVol * (PickQty / PackQty)))
		End	As Volume,
		Shipto,
		Customer,
		Address1,
		Address2,
		Address3,
		City,
		State,
		ZipCode,
		Country,
		CustPO,
		Routing
 
FROM
		OrderVolume
 
Group By
		
		Wave,
		PktCtrlNbr,
		PickArea,
		Lane,
		LaneId,
		LaneInt,
		Wave,
		Shipto,
		Customer,
		Address1,
		Address2,
		Address3,
		City,
		State,
		ZipCode,
		Country,
		CustPO,
		Routing

Open in new window

0
Comment
Question by:Jeff Geiselman
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 75

Expert Comment

by:Aneesh Retnakaran
ID: 24340397
  Change each of the case statement having a '/' like
           Case
                  When PickArea = 'NCP' Then Ceiling(Sum(PickQty / PackQty))
                  Else
                        0
            End      As CpnQy
           
   to
   
           
        Case
                  When PickArea = 'NCP' Then  CASE WHEN PackQty =0 THEN NULL ELSE Ceiling(Sum(PickQty / PackQty)) END
                  Else
                        0
            End      As CpnQy
           
           
0
 
LVL 3

Expert Comment

by:xbrady
ID: 24340413
I'm not sure why that might be happening in your specific case but it would probably be best if you replaced all instances of
(PickQty / PackQty)
with
CASE WHEN PackQty == 0 THEN 0.0 ELSE (PickQty / PackQty) END

Do you still get the divide by zero error if you do that?
0
 
LVL 60

Accepted Solution

by:
Kevin Cross earned 2000 total points
ID: 24340568
Your issue as described by error message is caused by dividing by 0; therefore, you will have to account for that as shown.  One slight tweak is that since your CASE WHEN already had an ELSE with 0, I would just do this:

Case
                        When PickArea = 'NCP' And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PickQty / PackQty))
                        Else
                                0
                End     As CpnQy

Select
                PktCtrlNbr,
                Lane,
                LaneId,
                LaneInt,
                Wave,
                Case
                        When PickArea = 'UN1' Then Ceiling(Sum(PickQty))
                        Else
                                0
                End     As Un1Qy,
                Case
                        When PickArea = 'UN2' Then Ceiling(Sum(PickQty))
                        Else
                                0
                End     As Un2Qy,
                Case
                        When PickArea = 'NCP' And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PickQty / PackQty))
                        Else
                                0
                End     As CpnQy,
                Case
                        When PickArea = 'OCP' And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PickQty / PackQty))
                        Else
                                0
                End     As CpoQy,
                Case
                        When PickArea IN ('NCP', 'OCP') And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PickQty / PackQty))
                        Else
                                0
                End     As CPQy,
                Case
                        When PickArea IN ('EOS', 'COS', 'NRS', 'ORS') And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PickQty / PackQty))
                        Else
                                0
                End     As RsvQy,
                Case
                        When PickArea IN ('EOS', 'COS', 'NRS', 'ORS') And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PackVol * (PickQty / PackQty)))
                        Else
                                0
                End     As RsvVl,
                Case
                        When PickArea = 'UN1' Or PickArea = 'UN2' Then Ceiling(Sum(UnitWt * PickQty))
                        When PickArea IN ('NCP', 'OCP', 'EOS', 'COS', 'NRS', 'ORS') And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PackWt * (PickQty / PackQty)))
                End     As Weight,
                Case
                        When PickArea = 'UN1' Or PickArea = 'UN2' Then Ceiling(Sum(UnitVol * PickQty))
                        When PickArea IN ('NCP', 'OCP', 'EOS', 'COS', 'NRS', 'ORS') And IsNull(PackQty, 0) <> 0 Then Ceiling(Sum(PackVol * (PickQty / PackQty)))
                End     As Volume,
                Shipto,
                Customer,
                Address1,
                Address2,
                Address3,
                City,
                State,
                ZipCode,
                Country,
                CustPO,
                Routing
 
FROM
                OrderVolume
 
Group By
                
                Wave,
                PktCtrlNbr,
                PickArea,
                Lane,
                LaneId,
                LaneInt,
                Wave,
                Shipto,
                Customer,
                Address1,
                Address2,
                Address3,
                City,
                State,
                ZipCode,
                Country,
                CustPO,
                Routing

Open in new window

0
 
LVL 1

Author Closing Comment

by:Jeff Geiselman
ID: 31579657
Thanks that works great except I had to add PackQty to the Group By clause as it was not in an aggregate clause.  Thanks for showing me how to use the IN clause that will save many keystrokes with large case statements.
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 24355157
Or move the entire CASE statement inside the SUM.

Therefore...

CEILING(SUM(Case When PickArea = 'OCP' And IsNull(PackQty, 0) <> 0 Then PickQty / PackQty Else 0 End)) As CpoQy

OR...

Case When PickArea = 'OCP' Then Ceiling(Sum(Case When IsNull(PackQty, 0) <> 0 Then PickQty / PackQty)) Else 0 End As CpoQy

But glad that helped.

Happy coding!

Kev
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I've encountered valid database schemas that do not have a primary key.  For example, I use LogParser from Microsoft to push IIS logs into a SQL database table for processing and analysis.  However, occasionally due to user error or a scheduled task…
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question