Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-01-2008
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 18
JuanPa1 Va por buen camino
Advertencia. Valor nulo eliminado del agregado

Hola amigos, estoy trabajando con la base de datos sql server 2000 y tengo la siguiente consulta sql:

select categry.Contents as Categoria,
avg(case when DATEDIFF(ss, visit.NExtTime, visit.Endtime)>=20 then DATEDIFF(ss, visit.NextTime, visit.Endtime) END) Tiempo_Atencion
from visit,categry where visit.branchno=2 and Visit.Category=CATEGRY.Category and Categry.branchno=2
and visit.Regdate='2006-09-01'-- and visit.Regdate<='2007-11-17'
group by visit.category,categry.Contents order by categry.Contents

Al ejecutar la consulta me retorna el resultado correcto pero me da la siguiente advertencia:
Advertencia. Valor nulo eliminado del agregado.

Como puedo hacer o que modifico en la consulta para que no me de ese warning?.

Gracias por sus prontas respuestas.

Saludos.
Responder Con Cita
  #2  
Antiguo 30-01-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
puedes utilizar la función isnull en tus campos para considerar un valor por default en la generáción del promedio.

aunque considero que la omisión de nulos es correcta ya que estás generando estadísticas con fecha y remplazar nulos con fechas predeterminadas puede afectar tu promedio. Simple observación mia.

Suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 31-01-2008
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 18
JuanPa1 Va por buen camino
Es decir, en este tipo de consultas está correcto que salga ese tipo de advertencias?. He intentado cambiar la consulta para que no me de esa advertencia pero el resultado ha cambiado completamente y no es el resultado esperado. He cambiado por esta sentencia sql:

select categry.Contents as Categoria,
avg(ISNULL(case when DATEDIFF(ss, visit.NExtTime, visit.Endtime)>=20 then DATEDIFF(ss, visit.NextTime, visit.Endtime) END,0)) Tiempo_Atencion
from visit,categry where visit.branchno=2 and Visit.Category=CATEGRY.Category and Categry.branchno=2
and visit.Regdate='2006-09-01'-- and visit.Regdate<='2007-11-17'
group by visit.category,categry.Contents order by categry.Contents


Espero tus comentarios.

Gracias por tu tiempo.

Saludos.
Responder Con Cita
  #4  
Antiguo 31-01-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si el resultado de la primera consulta es el correcto, yo añadiría en el where:
Código SQL [-]
where [tu sql] 
    and (visit.Regdate is not null) 
    and (visit.NExtTime is not null)
    and (visit.Endtime is not null)

No trabajo con sqlserver, pero creo que vale.

Si usas ISNULL y el nexTime es un nulo, se contará ese registro en el agregado, colocando un cero para ese registro al hallar la media (avg).

Si usas mi sugerencia, eliminas los registros con valores nulos antes de hacer el agregado, así no entran en la media y eliminas el aviso de sqlserver.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 31-01-2008
JuanPa1 JuanPa1 is offline
Miembro
 
Registrado: may 2006
Posts: 66
Poder: 18
JuanPa1 Va por buen camino
He utilizado tu sugerencia, de tal manera que la consulta quede de la siguiente manera pero igual me sigue saliendo el warning.

select categry.Contents as Categoria,
Case when
avg(case when DATEDIFF(ss, visit.NExtTime, visit.Endtime)>=20 then DATEDIFF(ss,visit.NextTime, visit.Endtime) END ) >0 then
avg(case when DATEDIFF(ss, visit.NExtTime, visit.Endtime)>=20 then DATEDIFF(ss, visit.NextTime, visit.Endtime) END ) else 0 END Tiempo_Atencion
from visit,categry where visit.branchno=2 and Visit.Category=CATEGRY.Category and Categry.branchno=2
and visit.Regdate ='2006-09-01' and (visit.Regdate is not null)
and (visit.NExtTime is not null)
and (visit.Endtime is not null)
group by visit.category,categry.Contents order by categry.Contents

Que es lo que estoy haciendo mal o como deberia quedar la consulta?

Gracias por tu tiempo.

Saludos.
Responder Con Cita
  #6  
Antiguo 31-01-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
despúes del avg utiliza isnull( ResultadoDelCase,Convert(DateTime,'FechaDefault',120) )


suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Asignar valor nulo a un entero Shikanda SQL 3 27-08-2007 14:26:23
Valor nulo en un string ElDioni Conexión con bases de datos 5 10-11-2005 09:29:57
Valor Nulo o en blanco y nil vtdeleon OOP 1 25-11-2004 05:41:50
Campo con valor nulo fjcg02 Conexión con bases de datos 4 10-11-2004 08:55:07
Valor nulo pache OOP 3 19-06-2003 08:39:13


La franja horaria es GMT +2. Ahora son las 05:12:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi