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

#16 Carlos M. Calvelo
06/11/2007 - 16:02 | Informe spam
Hola jeastman,


On 6 nov, 05:24, jeastman wrote:
Mostrar la cita
Aunque no has comentado tus consultas (que es lo que hacen,
lo hacen como tu quieres o no).. creo que la que te pongo
aquí hace lo que tu pretendes. Si no es así pues lo comentas
otra vez.


select inf.codProducto, inf.cantidadFacturado, inf.Monto,
inf.cantidadFacturado - isnull(sum(d.cantidad),0) as ventaEfectiva
from (select i.codProducto,
isnull(sum(f.cantidad),0) as cantidadFacturado,
isnull(sum(f.cantidad * f.monto),0) as Monto
from Inventario i left join facturaDetalle f
on i.codProducto = f.codProducto
group by i.codProducto) inf
left join devolucionVenta d
on inf.codProducto = d.codProducto
group by inf.codProducto, inf.cantidadFacturado, inf.Monto,
inf.cantidadFacturado

Saludos,
Carlos
#17 Carlos M. Calvelo
07/11/2007 - 15:40 | Informe spam
Hola otra vez jeastman,

On 5 nov, 15:05, jeastman wrote:
Mostrar la cita
Permíteme que insista. Lo que demuestran las consultas que he
puesto como ejemplo, no lo hacen solo para tablas base.
La tabla con la que empieza el ejemplo bien podía ser el
resultado de una subconsulta o una vista.
De ello atestiguan los ejemplos que has puesto tu donde no hay
nulos en las tables base, pero acaban apareciendo por todos los
lados en subconsultas con outer joins.

Tablas base, resultados de consultas, subconsultas, vistas... todas
son tablas.

Saludos,
Carlos
#18 jeastman
10/11/2007 - 03:07 | Informe spam
Hola Carlos.

Que más compañeros, disculpenme la ausencia del grupo, me salió un
trabajo que de esos de emergencia y he estado un poco full.

En éste momento tengo que continuar con algunas cosas, pero de verdad me
gustaría continuar el tema, tú y otros compañeros han expuesto algunos
puntos que yo desconocía y lo agradezco de verdad (estoy es un intensivo
y gratis ;-) ).

Yo escribí un ejemplo más adelante en éste mismo hilo que incluso otro
compañero me hizo una pregunta y en éste momento voy a tratar de
responderle.

Te entiendo completamente lo que dices en referencia a que tu
explicación aplica para tablas vistas, subconsultas y demás.

Más adelante encontrarás la respuesta que le voy a dar al compañero, no
se si es donde comentas algo tú también.

En ese ejemplo que pongo, según veo, con la misma consulta y subconsulta
me da resultados diferentes según el isnull envuelve al sum o es el sum
quien envuelve al isnull.

Luego con más calma trataré explicarme mejor y así aprobecho observar
las constructivas críticas que van haciendo.

Nuevamente, gracias a ti Carlos y a los otros compañeros que gentilmente
han hecho observaciones a mis opiniones.

Saludos para todos.

Carlos M. Calvelo escribió:
Mostrar la cita
#19 jeastman
10/11/2007 - 03:13 | Informe spam
Carlos, nuevamente se te saluda.

Yo pensé que era otra persona que había hecho los comentarios, pero
ahora puedo ver que fuiste tú.

Bien, trataré de explicarme un poco.

Lo que hago en las consultas es muy simple, en realidad la consultas con
la base para mostrar lo que he tratado de explicar sobre el uso del
isnull( sum( .. ), 0 ) con respecto al sum( isnull( .., 0 ) ).

En los comentarios que tú y otros compañeros han hecho no veo ningún
error, solo estoy mostrando uno de los casos que me ha pasado a mi, hay
otro que luego con más calma me gustaría mostrar y por supuesto
dispuesto como siempre a que me sea criticado, de ello se aprende mucho.

Si tienes la oportunidad ejecuta el script y verás como en las últimas
consultas se puede notar una diferencia en los resultados y la única
diferencia que existe es en quien envuelve a quien, el isnull al sum o
viceversa.

La consulta no la pongo como pregunta si es así o no es así como se hace
o sobre si tengo alguna duda, solo es un ejemplo.

Nuevamente, gracias por el tiempo que te tomas igual para los otros
compañeros.

Saludos para todos.


Carlos M. Calvelo escribió:
Mostrar la cita
#20 jeastman
10/11/2007 - 03:20 | Informe spam
Creo que nos van a acusar de monopolistas, jajaja

Que tal viejo, nuevamente yo.

Ya te pongo los resultados y la observación.


codProducto cantidad ventaEfectiva
1 16 13
2 12 11
3 5 NULL
4 NULL NULL

codProducto cantidad ventaEfectiva
1 16 13
2 12 11
3 5 5
4 NULL NULL


codProducto cantidad ventaEfectiva
1 16 13
2 12 11
3 5 0
4 NULL 0


Por favor, compara el resultado de la columna "ventaEfectiva" para los
productos 2, 3 y 4 en éstos resultados que corresponde a las últimas
consultas y luego observas la forma en que se utiliza el isnull y el sum
para las correspondientes consultas.

Ese es mi comentario, me gustaría ver tu opinión y por supuesto si algún
otro compañero tiene algo que agregar, bien venido.

Luego te ponto otro ejemplo con devoluciones pero a nivel de documento.

Saludos.
Carlos M. Calvelo escribió:
Mostrar la cita
Ads by Google
Search Busqueda sugerida