SQL - Divide by zero error encountered.

   
Vista:

Divide by zero error encountered.

Publicado por Ernesto (1 intervención) el 27/01/2009 02:33:35
Buen día tengo un problema con una query

el query es el siguiente:

SELECT I.poliza, I.xtOferta_Oferta, Round((O.Imp_con_IVA),2), O.Numero_de_plazos, cast(O.Imp_con_IVA as float) / cast (O.Numero_de_plazos as float)

aqui me marca error en la siguiente division

cast(O.Imp_con_IVA as float) / cast (O.Numero_de_plazos as float)

ya que al quitar la parte de la division de la siquitente manera me trae los valores correctos

SELECT I.poliza, I.xtOferta_Oferta, Round((O.Imp_con_IVA),2), O.Numero_de_plazos

Round((O.Imp_con_IVA),2) = 258

O.Numero_de_plazos = 0

Tambien al ejecutar sumandole 0.01 al divisor si ejecuta el query bien de la siguiente manera

SELECT I.poliza, I.xtOferta_Oferta, Round((O.Imp_con_IVA),2), O.Numero_de_plazos, cast(O.Imp_con_IVA as float) / (cast (O.Numero_de_plazos as float)+0.01)

poliza 219277

Oferta 161

Iva 258

Plazos 12

Resultado de la division 21.4820982514571

pero necesito hacerlo sin sumarle ese 0.01
a que se debe el error que me marca de que divide entre si Numero_de_plazos es 12?????
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Divide by zero error encountered.

Publicado por Liliana (426 intervenciones) el 27/01/2009 12:33:43
Hola Ernesto,
Cuando Numero_de_plazos es cero, cancelará por intentar dividir por cero. Cuando no cancela es porque Numero_de_plazos tiene otro valor.
Deberás encontrar una salida para esas situaciones, como por ejemplo:
- Filtrar esas filas en el WHERE
- Reemplazar el cero por otro valor con CASE
Pero no sumar 0.01, porque va a alterar los resultados.

Saludos,
Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Divide by zero error encountered.

Publicado por Chayo (5 intervenciones) el 28/01/2009 00:41:30
también puedes poner una condición para que sólo ejecute la intrucción cuando el número de plazos sea mayor a cero:

IF O.Numero_de_plazos >0
BEGIN
SELECT I.poliza, I.xtOferta_Oferta, Round((O.Imp_con_IVA),2), O.Numero_de_plazos, cast(O.Imp_con_IVA as float) / cast (O.Numero_de_plazos as float)
END

--------------------
aunque, si entendí bien... el número de plazos es fijo y debe ser 12, pero si pones toda la instrucción te da cero? en ese caso no se cual es el problema...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Divide by zero error encountered.

Publicado por Danilo (6 intervenciones) el 13/02/2009 06:31:41
SELECT I.poliza, I.xtOferta_Oferta, Round((O.Imp_con_IVA),2), O.Numero_de_plazos, cast(O.Imp_con_IVA as float) / cast (O.Numero_de_plazos as float)
where cast (O.Numero_de_plazos as float) <> 0.00
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Divide by zero error encountered.

Publicado por Javier (1 intervención) el 29/01/2014 16:49:16
Les sugiero esta solución que es mucho más eficiente y económica que las que postearon:
http://www.bennadel.com/blog/984-Using-NULLIF-To-Prevent-Divide-By-Zero-Errors-In-SQL.htm

Si la ecuación es:
Numerador/Denominador

Y el risgo es que Denominador = 0 entonces pueden poner esto:

Isnull( Numerador / Nullif( Denominador, 0), 0)

Si el Denominador es = 0 entonces transformará en Nulo al denominador y, como la ecuación será = Nulo entonces Isnull transformará todo en cero

Javier
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar