cancel
Showing results for 
Search instead for 
Did you mean: 

Error en Query : [SQL Server] Error de Division entre 0

gabriel_donoso
Participant
0 Kudos

Maestros !!

Tengo este problema:

Al ejecutar una query me figura este error " [SQL Server] Error de Division entre 0 ". Entiendo el error, cualquier numero divido por 0 arroja este problema, mi pregunta es como lo hago para no considerar las operaciones con resultado 0. Al revisar las operaciones que esta resumiendo la funcion AVG existen operaciones con resultado 0.

La query es la siguiente:

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 01'
INTO #FV01 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='01'
GROUP BY T3.FirmCode, T3.FirmName

ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 02'
INTO #FV02 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='02'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 03'
INTO #FV03 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='03'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 04'
INTO #FV04 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='04'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 05'
INTO #FV05 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='05'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 06'
INTO #FV06 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='06'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 07'
INTO #FV07 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='07'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 08'
INTO #FV08 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='08'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 09'
INTO #FV09 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='09'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 11'
INTO #FV11 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='11'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 12'
INTO #FV12 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode IN('12','12A','12B','12C')
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 14'
INTO #FV14 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='14'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 20'
INTO #FV20 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='20'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 221'
INTO #FV21 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='221'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 22'
INTO #FV22 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='22'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT T3.FirmCode, T3.FirmName, SUM(T1.Quantity) as 'Cantidades', AVG(T1.Price) as 'Precio Venta Promedio', AVG(T1.StockPrice) as 'Costo Promedio', SUM(T1.LineTotal) as 'Venta Neta', AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 23'
INTO #FV23 FROM OINV T0  INNER JOIN INV1 T1 ON T0.DocEntry = T1.DocEntry  INNER JOIN OITM T2 ON T2.ItemCode = T1.ItemCode LEFT OUTER JOIN OMRC T3 ON T3.FirmCode = T2.FirmCode
WHERE T0.DocDate >= '[%0]' and T0.DocDate <= '[%1]'  and ISNULL(T0.Indicator,'') <> 'NL' and T0.DocType ='I' and T1.WhsCode ='23'
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

---SELECCION DE DATOS

SELECT T3.FirmCode, T3.FirmName as 'Proveedor',
(Select T201.[Margen Almacen 01] From  #FV01 T201 where T201.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 01',
(Select T202.[Margen Almacen 02] From  #FV02 T202 where T202.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 02',
(Select T203.[Margen Almacen 03] From  #FV03 T203 where T203.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 03',
(Select T204.[Margen Almacen 04] From  #FV04 T204 where T204.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 04',
(Select T205.[Margen Almacen 05] From  #FV05 T205 where T205.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 05',
(Select T206.[Margen Almacen 06] From  #FV06 T206 where T206.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 06',
(Select T207.[Margen Almacen 07] From  #FV07 T207 where T207.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 07',
(Select T208.[Margen Almacen 08] From  #FV08 T208 where T208.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 08',
(Select T209.[Margen Almacen 09] From  #FV09 T209 where T209.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 09',
(Select T211.[Margen Almacen 11] From  #FV11 T211 where T211.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 11',
(Select T212.[Margen Almacen 12] From  #FV12 T212 where T212.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 12',
(Select T214.[Margen Almacen 14] From  #FV14 T214 where T214.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 14',
(Select T220.[Margen Almacen 20] From  #FV20 T220 where T220.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 20',
(Select T221.[Margen Almacen 221] From  #FV21 T221 where T221.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 221',
(Select T222.[Margen Almacen 22] From  #FV22 T222 where T222.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 22',
(Select T223.[Margen Almacen 23] From  #FV23 T223 where T223.[FirmCode] = T3.FirmCode) as 'Margen Venta Local 23'

INTO #RESULT FROM OITM T2 LEFT OUTER JOIN OMRC T3 ON T3.FirmCode =T2.FirmCode
GROUP BY T3.FirmCode, T3.FirmName
ORDER BY T3.FirmName

SELECT * FROM #RESULT where isnull([Margen Venta Local 01],0) <> 0
or isnull([Margen Venta Local 02], 0) <> 0
or isnull([Margen Venta Local 03], 0) <> 0
or isnull([Margen Venta Local 04], 0) <> 0
or isnull([Margen Venta Local 05], 0) <> 0
or isnull([Margen Venta Local 06], 0) <> 0
or isnull([Margen Venta Local 07], 0) <> 0
or isnull([Margen Venta Local 08], 0) <> 0
or isnull([Margen Venta Local 09], 0) <> 0
or isnull([Margen Venta Local 11], 0) <> 0
or isnull([Margen Venta Local 12], 0) <> 0
or isnull([Margen Venta Local 14], 0) <> 0
or isnull([Margen Venta Local 20], 0) <> 0
or isnull([Margen Venta Local 221], 0) <> 0
or isnull([Margen Venta Local 22], 0) <> 0
or isnull([Margen Venta Local 23], 0) <> 0

---FIN

Agradeciendo vuestra ayuda.

Accepted Solutions (1)

Accepted Solutions (1)

eloy_ploche2
Participant
0 Kudos

Buentas Gabriel,

Creo que lo que te falta es evaluar el valor de   T1.Line Total antes de hacer la operacion. Agregale un case para establecer cuando es valor cero. Quedaria asi, 

Case when T1.LineTotal = 0 then 0 else AVG((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100) as 'Margen Almacen 01',

gabriel_donoso
Participant
0 Kudos

Buenas Tardes Eloy

Al revisar todas las transacciones una a una, ninguna de ellas en el campo T1.LineTotal tiene como resultado el valor 0 ya que el campo T1.LineTotal es el monto neto de la venta (sin impuestos) y este nunca es 0 ya que tenemos validaciones antes de crear el documento.

El valor 0 aparece como resultado de esta operación ((1-((T1.Quantity*T1.StockPrice)/T1.LineTotal))*100), ya que en varios ventas se vendió al mismo precio del costo del producto debido a promociones o liquidaciones de stock, por lo tanto el resultado 0 en dicha operación es correcto.

Cuando a estas operación le aplico la función AVG para resumir datos comienza el problema.

Que me sugieres que realice?

Agradeciendo tu ayuda.

gabriel_donoso
Participant
0 Kudos

Buenas Tardes Eloy

Tenias toda la razón, el campo LineTotal presentaba un registro con valor 0, lo cual me originaba el problema. Una de las validaciones para que este no ocurriera no funciono!!

Al ejecutar las consultas en SQL directamente me di cuenta del error.

Agradezco tu ayuda.

Slds.

Answers (0)