Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Advertencia. Valor nulo eliminado del agregado (https://www.clubdelphi.com/foros/showthread.php?t=52765)

JuanPa1 30-01-2008 16:22:26

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.

poliburro 30-01-2008 17:17:45

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

JuanPa1 31-01-2008 15:54:55

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.

Lepe 31-01-2008 16:33:31

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

JuanPa1 31-01-2008 17:24:35

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.

poliburro 31-01-2008 20:51:09

despúes del avg utiliza isnull( ResultadoDelCase,Convert(DateTime,'FechaDefault',120) )


suerte


La franja horaria es GMT +2. Ahora son las 10:33:30.

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