Duda con Isnull en SUM

04/11/2007 - 18:06 por Alexis | Informe spam
Solicito su ayuda para esto:

Tengo dos tablas
a) registros de compras
compras (numcompra, valor, fecha)

b)registros de pagos de esas compras
pagos (numcompra, numpago, valor)

Es una relacion opcional de 1 a N por Numcompra y quiero obtener los
balances de cada compra:

Numcompra, Comprado, Pagado

Tengo el siguiente select:

select numcompra, comprado=compras.valor, pagado=sum(pagos.valor)
from compras
left join pagos on compras.numcompra=pagos.numcompra
group by numcompra,compras.valor

Dado que es un Left Join, la pregunta es como debo usar ISNULL para que la
columna "Pagado" me de Cero cuando la compra no tenga ningun pago:

asi: ISNULL(sum(pagos.valor),0)
o asi: sum( ISNULL(pagos.valor,0) )
o asi: ISNULL(sum( ISNULL(pagos.valor,0) ), 0)
?


Gracias

Preguntas similare

Leer las respuestas

#1 jeastman
04/11/2007 - 18:20 | Informe spam
hola Alexis

sum( isnull( pagos.valor, 0 ) )

Saludos


Alexis escribió:
Solicito su ayuda para esto:

Tengo dos tablas
a) registros de compras
compras (numcompra, valor, fecha)

b)registros de pagos de esas compras
pagos (numcompra, numpago, valor)

Es una relacion opcional de 1 a N por Numcompra y quiero obtener los
balances de cada compra:

Numcompra, Comprado, Pagado

Tengo el siguiente select:

select numcompra, comprado=compras.valor, pagado=sum(pagos.valor)
from compras
left join pagos on compras.numcompra=pagos.numcompra
group by numcompra,compras.valor

Dado que es un Left Join, la pregunta es como debo usar ISNULL para que la
columna "Pagado" me de Cero cuando la compra no tenga ningun pago:

asi: ISNULL(sum(pagos.valor),0)
o asi: sum( ISNULL(pagos.valor,0) )
o asi: ISNULL(sum( ISNULL(pagos.valor,0) ), 0)
?


Gracias


Respuesta Responder a este mensaje
#2 Alexis
04/11/2007 - 19:04 | Informe spam
Una duda final:
En cuales casos es que un agregado como SUM() debe envolverse con un
ISNULL() ?, ejemplo:

select ISNULL( SUM(pagos.valor), 0).


Gracias de nuevo.



"jeastman" escribió en el mensaje
news:ePiw$
hola Alexis

sum( isnull( pagos.valor, 0 ) )

Saludos


Alexis escribió:
Solicito su ayuda para esto:

Tengo dos tablas
a) registros de compras
compras (numcompra, valor, fecha)

b)registros de pagos de esas compras
pagos (numcompra, numpago, valor)

Es una relacion opcional de 1 a N por Numcompra y quiero obtener los
balances de cada compra:

Numcompra, Comprado, Pagado

Tengo el siguiente select:

select numcompra, comprado=compras.valor, pagado=sum(pagos.valor)
from compras
left join pagos on compras.numcompra=pagos.numcompra
group by numcompra,compras.valor

Dado que es un Left Join, la pregunta es como debo usar ISNULL para que
la columna "Pagado" me de Cero cuando la compra no tenga ningun pago:

asi: ISNULL(sum(pagos.valor),0)
o asi: sum( ISNULL(pagos.valor,0) )
o asi: ISNULL(sum( ISNULL(pagos.valor,0) ), 0)
?


Gracias
Respuesta Responder a este mensaje
#3 jeastman
05/11/2007 - 02:25 | Informe spam
Hola Alexis.

Si observas con atención mi ejemplo es un poco diferente al tuyo.

mi ejemplo

select sum( isnull( pagos.valor, 0 ) )

el tuyo

select isnull( sum( pagos.valor ), 0 )

En la forma en que tú has escrito el uso de sum e isnull, si un valor de
pagos.valor es nulo el resultado de sum será null, ahora, de la forma
sum( isnull( pagos.valor, 0 ) ), si hay un valor para pagos.valor que
sea nulo, la función isnull retorna 0 para lo que la función sum nunca
verá el null y toma el valor cero.

Utiliza isnull cuando existe la posibilidad de que una variable o una
columna pueda tener un valor null, como en tu caso, al tener una
consulta con un left join se tiene un alto nivel de posibilidades que no
existan registros en la tabla de la derecha para algunos registros de la
tabla de la izquierda.

Existen más casos que justifican el uso del isnull, la práctica te los
irá mostrando, en caso de alguna duda, pregunta, alguien te puede dar
una mano.

Saludo.

Alexis escribió:
Una duda final:
En cuales casos es que un agregado como SUM() debe envolverse con un
ISNULL() ?, ejemplo:

select ISNULL( SUM(pagos.valor), 0).


Gracias de nuevo.



"jeastman" escribió en el mensaje
news:ePiw$
hola Alexis

sum( isnull( pagos.valor, 0 ) )

Saludos


Alexis escribió:
Solicito su ayuda para esto:

Tengo dos tablas
a) registros de compras
compras (numcompra, valor, fecha)

b)registros de pagos de esas compras
pagos (numcompra, numpago, valor)

Es una relacion opcional de 1 a N por Numcompra y quiero obtener los
balances de cada compra:

Numcompra, Comprado, Pagado

Tengo el siguiente select:

select numcompra, comprado=compras.valor, pagado=sum(pagos.valor)
from compras
left join pagos on compras.numcompra=pagos.numcompra
group by numcompra,compras.valor

Dado que es un Left Join, la pregunta es como debo usar ISNULL para que
la columna "Pagado" me de Cero cuando la compra no tenga ningun pago:

asi: ISNULL(sum(pagos.valor),0)
o asi: sum( ISNULL(pagos.valor,0) )
o asi: ISNULL(sum( ISNULL(pagos.valor,0) ), 0)
?


Gracias






Respuesta Responder a este mensaje
#4 Alexis
05/11/2007 - 02:51 | Informe spam

Si observas con atención mi ejemplo es un poco diferente al tuyo.

mi ejemplo

select sum( isnull( pagos.valor, 0 ) )

el tuyo

select isnull( sum( pagos.valor ), 0 )




Claro, tu respuesta la entendi bien como valida. Mi pregunta nueva es otra
que no tiene que ver con dicha respuesta.

De todos modos gracias de nuevo.
Respuesta Responder a este mensaje
#5 jeastman
05/11/2007 - 03:02 | Informe spam
Hola Alexis.

Estaba respondiendo a tu pregunta, pero creo que no supe explicarme.

Yo hasta ahora nunca he visto la necesidad de envolver un sum con un
isnull "isnull( sum( ... ), 0 ).

Por lo contrario y es lo que te explico en el mensaje anterior.

Si haces lo mensionado más arriba "isnull( sum( ... ), 0 )" existe la
posibilidad que alguno de los valores que le pasas a sun sea nulo por lo
que todo el resultado de sum será null, por ello es que se debe hacer
así "sum( isnull( ..., 0 ) )"



Saludos.

Alexis escribió:
Si observas con atención mi ejemplo es un poco diferente al tuyo.

mi ejemplo

select sum( isnull( pagos.valor, 0 ) )

el tuyo

select isnull( sum( pagos.valor ), 0 )




Claro, tu respuesta la entendi bien como valida. Mi pregunta nueva es otra
que no tiene que ver con dicha respuesta.

De todos modos gracias de nuevo.



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