SUM y su devolución en caso de que no haya registros

13/02/2004 - 10:16 por Mario Barro | Informe spam
Hola;

Tengo una duda en cuanto a lo cómo distingir (cómo tratarlo) cuando una
función del tipo SUM con una sentencia que filtra los registros hasta un
nivel que no recuperar ninguno.

Es decir,

Declare @Total int

Select @Total = SUM(campo) from Tabla Where condicion= 0;

Y resulta que "condicion" es tan restrictiva que no recupera ningún
registro.
Pensaba que en estos casos @Total sería cero, pero no es así.
Tampoco es NULL
¿Qué es entonces?
¿Cómo puedo saber que ha sucedido este caso?

Gracias y saludos

Preguntas similare

Leer las respuestas

#1 Mario Barro
13/02/2004 - 10:22 | Informe spam
Lo he solucionado colocando un "Count" también y comprobando si es
diferente de cero.
Y funciona, pero mi duda sigue ahí.

Saludos.


"Mario Barro" escribió en el mensaje
news:
Hola;

Tengo una duda en cuanto a lo cómo distingir (cómo tratarlo) cuando una
función del tipo SUM con una sentencia que filtra los registros hasta un
nivel que no recuperar ninguno.

Es decir,

Declare @Total int

Select @Total = SUM(campo) from Tabla Where condicion= 0;

Y resulta que "condicion" es tan restrictiva que no recupera ningún
registro.
Pensaba que en estos casos @Total sería cero, pero no es así.
Tampoco es NULL
¿Qué es entonces?
¿Cómo puedo saber que ha sucedido este caso?

Gracias y saludos


Respuesta Responder a este mensaje
#2 manel gonzalez
13/02/2004 - 10:27 | Informe spam
Colocale un Isnull()

Select @Total = isnull(SUM(campo),0) from Tabla Where condicion= 0;






"Mario Barro" escribió en el mensaje
news:
Hola;

Tengo una duda en cuanto a lo cómo distingir (cómo tratarlo) cuando una
función del tipo SUM con una sentencia que filtra los registros hasta un
nivel que no recuperar ninguno.

Es decir,

Declare @Total int

Select @Total = SUM(campo) from Tabla Where condicion= 0;

Y resulta que "condicion" es tan restrictiva que no recupera ningún
registro.
Pensaba que en estos casos @Total sería cero, pero no es así.
Tampoco es NULL
¿Qué es entonces?
¿Cómo puedo saber que ha sucedido este caso?

Gracias y saludos


Respuesta Responder a este mensaje
#3 José Raúl Fenollar Martínez
13/02/2004 - 10:50 | Informe spam
Select @Total = SUM( isnull(campo,0) ) from Tabla Where condicion= 0

es importante aplicar el isnull al campo y no al SUM, por lo siguiente.

imagina que tienes 3 registros
1.- 5
2.- null
3.- 7

5+null+7=null
y por lo tanto en la sentencia con el isnull(sum(campo1),0)
=isnull(5+null+7,0)=isnull(null,0)=0
mientra que en la sentencia SUM( isnull(campo,0) )
=isnull(5,0)+isnull(null,0)+isnull(7,0)=5+0+7

Un saludo desde Gandia

"Mario Barro" escribió en el mensaje
news:
Hola;

Tengo una duda en cuanto a lo cómo distingir (cómo tratarlo) cuando una
función del tipo SUM con una sentencia que filtra los registros hasta un
nivel que no recuperar ninguno.

Es decir,

Declare @Total int

Select @Total = SUM(campo) from Tabla Where condicion= 0;

Y resulta que "condicion" es tan restrictiva que no recupera ningún
registro.
Pensaba que en estos casos @Total sería cero, pero no es así.
Tampoco es NULL
¿Qué es entonces?
¿Cómo puedo saber que ha sucedido este caso?

Gracias y saludos


Respuesta Responder a este mensaje
#4 ulises
13/02/2004 - 14:56 | Informe spam
Como bien apunta José es necesario que el control también
se haga al campo mismo porque sino el resultado de la suma
de algo contra NULL siempre será NULL, veamos unos
ejemplos :

1. Creamos la tabla de prueba :

create table #tempo ( clave int not null, campo int )
go
insert into #tempo values ( 1,1 )
insert into #tempo values ( 2, NULL)

2. Hacemos una consulta que no devuelve datos :

select sum(isnull(campo,0)) from #tempo where clave = 3

el resultado sera :

NULL

por lo tanto tendriamos que incluir tambien el ISNULL para
considerar ese caso :

select isnull(sum(isnull(campo,0)),0) from #tempo where
clave = 3

resultado :

0

3. Si realizamos agrupaciones contra el select, entonces
no obtendremos ningun valor, tal vez ese sea el caso que
mencionas :

select clave, sum(isnull(campo,0))
from #tempo
where clave = 3
group by clave

resultado :

clave

(0 row(s) affected)

y ojo que esto también se presenta en un select simple a
una vista creada con este select agrupado.

Saludos,
Ulises


Lo he solucionado colocando un "Count" también y


comprobando si es
diferente de cero.
Y funciona, pero mi duda sigue ahí.

Saludos.


"Mario Barro" escribió en el


mensaje
news:
Hola;

Tengo una duda en cuanto a lo cómo distingir (cómo




tratarlo) cuando una
función del tipo SUM con una sentencia que filtra los




registros hasta un
nivel que no recuperar ninguno.

Es decir,

Declare @Total int

Select @Total = SUM(campo) from Tabla Where condicion=




0;

Y resulta que "condicion" es tan restrictiva que no




recupera ningún
registro.
Pensaba que en estos casos @Total sería cero, pero no




es así.
Tampoco es NULL
¿Qué es entonces?
¿Cómo puedo saber que ha sucedido este caso?

Gracias y saludos






.

Respuesta Responder a este mensaje
#5 ulises
13/02/2004 - 14:59 | Informe spam
Ops, borra la última parte del punto 3., si haces el
select sobre la vista funciona igual que en la tabla.

Saludos,
Ulises

Como bien apunta José es necesario que el control también
se haga al campo mismo porque sino el resultado de la


suma
de algo contra NULL siempre será NULL, veamos unos
ejemplos :

1. Creamos la tabla de prueba :

create table #tempo ( clave int not null, campo int )
go
insert into #tempo values ( 1,1 )
insert into #tempo values ( 2, NULL)

2. Hacemos una consulta que no devuelve datos :

select sum(isnull(campo,0)) from #tempo where clave = 3

el resultado sera :

NULL

por lo tanto tendriamos que incluir tambien el ISNULL


para
considerar ese caso :

select isnull(sum(isnull(campo,0)),0) from #tempo where
clave = 3

resultado :

0

3. Si realizamos agrupaciones contra el select, entonces
no obtendremos ningun valor, tal vez ese sea el caso que
mencionas :

select clave, sum(isnull(campo,0))
from #tempo
where clave = 3
group by clave

resultado :

clave

(0 row(s) affected)

y ojo que esto también se presenta en un select simple a
una vista creada con este select agrupado.

Saludos,
Ulises

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida