Error de Query (Divide by zero error encountered)

sql
Etiquetas: #<Tag:0x00007f43517e0748>

#1

Buena tarde:

Tengo una query para conocer el importe neto de las ventas, el costo y la utilidad de mis artículos en un determinado periodo

Ahora necesito agregar una columna para determinar el:
% que representa el costo sobre la venta y el
% que represente la utilidad sobre la venta

Necesito que la formula que considere que puede haber productos vendidos sin cargo y servicios sin costo

"Me pueden ayudar / guiar / instruir / orientar, como crear dicha formula y evitar crear un error de división, por favor???

Ya intente algunas opciones pero todas sin exito!!

Les dejo la query original indicando donde necesito estas columnas

Saludos y gracias por su tiempo y comentarios…

SELECT T10.Catalogo, SUM(T10.Total)'cantidad', SUM(T10.Importe)'Importe', SUM(T10.Costo)'Costo', SUM(T10.Utilidad)'Utilidad'

FROM
(
SELECT
T2.[U_Catalogo] AS Catalogo,
SUM(T0.[Quantity]) AS Total,
SUM(T0.[LineTotal]) AS Importe,
SUM(T0.[StockValue]) AS Costo,

**aqui necesito agregar Costo / Importe = % del costo**

SUM(T0.[LineTotal]-T0.[StockValue]) AS Utilidad`

**aqui necesito agregar Utilidad / Importe = % del Utilidad**


FROM
INV1 T0
INNER JOIN OINV T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OITM T2 ON T0.[ItemCode] = T2.[ItemCode]

WHERE
T1.[CANCELED] = 'N' 
AND T1.[DocDate] >=[%0] 
AND T1.[DocDate] <=[%1] 
AND T0.[ItemCode] <> 'Anticip Clientes'

Group By
T2.[U_Catalogo]

UNION ALL

SELECT
T2.[U_Catalogo] AS Catalogo,
-SUM(T0.[Quantity]) AS Total,
-SUM(T0.[LineTotal]) AS Importe,
-SUM(T0.[StockValue]) AS Costo,

**aqui necesito agregar Costo / Importe = % del costo**

-SUM((T0.[LineTotal]-T0.[StockValue])) AS Utilidad`

**aqui necesito agregar Utilidad / Importe = % del Utilidad**


FROM
RIN1 T0
INNER JOIN ORIN T1 ON T0.[DocEntry] = T1.[DocEntry]
INNER JOIN OITM T2 ON T0.[ItemCode] = T2.[ItemCode]

WHERE
T1.[CANCELED] = 'N' AND T1.[DocDate] >= [%0] AND T1.[DocDate] <=[%1] AND T0.[ItemCode] <> 'Anticip Clientes'

Group By
T2.[U_Catalogo]
)

T10
GROUP BY

T10.Catalogo

#2

Hola @Sergio.lopez
Debes utilizar un CASE donde si el denominador es igual a 0 entonces no realizas division, de lo contrario efectuas la operacion
Ej. CASE WHEN Quantity = 0 THEN LineTotal ELSE LineTotal/Quantity END

Andres Ramirez Jaramillo :colombia:


#3

Gracias Andres:

A veces lo fácil se complica, pero al mismo tiempo lo complicado puede ser tan sencillo

Ya lo aplique en una query de articulo por factura y quedo bien…

Ahora necesito aplicarlo en una query donde hay Facturas y Notas de crédito, y se agrupan por articulo o cliente, espero no se me complique el asunto con la nueva variable

Saludos y muchas gracias, por tu ayuda…


#4

Buena tarde Andres:

Lo dicho, cuando intente agregar la formula para dividir el “costo” / “importe” y me muestre la proporción, me manda un error

Serias tan amable de ayudarme con esta situación, por favor ??

Saludos y gracias…

Te dejo la query de referncia:

SELECT T10.Region, sum(T10.Importe) 'Venta', sum(T10.Costo) 'Costo', sum(T10.Utilidad) 'Utilidad', sum(T10.%costo)

FROM
(
SELECT 
T3.[descript] AS Region, 
sum(T1.[LineTotal]) 'Importe', 
sum(T1.[StockValue]) 'Costo', 
**costo / importe AS %costo,**
sum(T1.[LineTotal]) - sum(T1.[StockValue]) 'Utilidad' 

FROM 
OINV T0  
INNER JOIN INV1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN OCRD T2 ON T0.[CardCode] = T2.[CardCode]
INNER JOIN OTER T3 ON T2.[Territory] = T3.[territryID]

WHERE 
T0.[CANCELED] = 'N' AND  T0.[DocDate] >=[%0] AND  T0.[DocDate] <=[%1] 

GROUP BY 
T3.[descript]

union all

SELECT 
T4.[descript] AS Region, 
-sum(T1.[LineTotal]) 'Importe', 
-sum(T1.[StockValue]) 'Costo', 
**costo / importe AS %costo,**
-(sum(T1.[LineTotal]) - sum(T1.[StockValue])) 'Utilidad' 

FROM 
ORIN T0  
INNER JOIN RIN1 T1 ON T0.[DocEntry] = T1.[DocEntry] 
INNER JOIN OITM T2 ON T1.[ItemCode] = T2.[ItemCode] 
INNER JOIN OCRD T3 ON T0.[CardCode] = T3.[CardCode]
INNER JOIN OTER T4 ON T3.[Territory] = T4.[territryID]

WHERE 
T0.[CANCELED] = 'N' AND  T0.[DocDate] >=[%0] AND  T0.[DocDate] <=[%1] and T2.[ItemCode] <> 'Anticip Clientes'

GROUP BY 
T4.[descript]
)
T10
GROUP BY

T10.Region

#5