none
Ayuda : error de division entre 0 RRS feed

  • Pregunta

  • SELECT   table1.id, table1.id_categoria, SUM(table1.kg) AS totkg,
             SUM(isnull(table1.total, 0)) /  SUM(isnull(table1.kgnetos, 0))  AS meprecio                 
    FROM         table1

    Con este select, tengo el problema de division entre 0, como podria hacer para que cuando el campo total o kgnetos sea 0 no me lo tenga en cuenta. pense que con isnull SUM(isnull(table1.total, 0)) seria sfuciente pero ya veo que no....

    Gracias!

    lunes, 22 de julio de 2013 10:02

Respuestas

  • Buenas, eso lo puedes controlar fácilmente con la cláusula CASE: http://msdn.microsoft.com/en-us/library/ms181765.aspx

    la división por 0 es una indeterminación matemática que hay que evitar puesto que no tiene solución.

    SELECT   table1.id, table1.id_categoria, SUM(table1.kg) AS totkg,
       case
       when SUM(isnull(table1.kgnetos, 0)) = 0
        then  'lo que consideres como valor indeterminado'
       ELSE
        SUM(isnull(table1.total, 0)) /  SUM(isnull(table1.kgnetos, 0)) 
        end AS meprecio                

     FROM         table1


    Enrique Catala Bañuls Mentor SolidQ (www.solidq.com) Twitter: @enriquecatala Microsoft Certified Trainer Microsoft Active Profesional Microsoft Technical Ranger

    lunes, 22 de julio de 2013 12:08

Todas las respuestas

  • Hay que cambiar el SUM(isnull(table1.kgnetos, 0))  En NullIf(Sum(table1.kgnetos),0)
    La división en Null resulta en Null que es correcto.


    El castellano no es mi lengua materna. Discúlpenme por los errores gramaticales, y, si pueden, corríjanme en los comentarios, o por correo electrónico. ¡Muchas gracias! Blog: http://about.me/GeriReshef

    lunes, 22 de julio de 2013 11:08
  • Buenas, eso lo puedes controlar fácilmente con la cláusula CASE: http://msdn.microsoft.com/en-us/library/ms181765.aspx

    la división por 0 es una indeterminación matemática que hay que evitar puesto que no tiene solución.

    SELECT   table1.id, table1.id_categoria, SUM(table1.kg) AS totkg,
       case
       when SUM(isnull(table1.kgnetos, 0)) = 0
        then  'lo que consideres como valor indeterminado'
       ELSE
        SUM(isnull(table1.total, 0)) /  SUM(isnull(table1.kgnetos, 0)) 
        end AS meprecio                

     FROM         table1


    Enrique Catala Bañuls Mentor SolidQ (www.solidq.com) Twitter: @enriquecatala Microsoft Certified Trainer Microsoft Active Profesional Microsoft Technical Ranger

    lunes, 22 de julio de 2013 12:08