PDA

Ver la Versión Completa : Suma duplicada...


Jose Roman
29-01-2009, 18:12:33
Hola a todos,
Resulta que estoy realizando una consulta y utilizo tres tablas:
- FACTURA
- PAGOS_DEL_MES
- PAGOS_DEL_DIA
Esto lo realizo con esta consulta:
select sum(M.VR_RC), sum(D.VR_RC)
from FACTURA F
join PAGOS_DEL_DIA D on D.FACTURA = F.NUMERO_FACTURA
join PAGOS_DEL_MES M on M.FACTURA = F.NUMERO_FACTURA
where F.NUMERO_FACTURA = 29680

En PAGOS_DEL_MES solo hay un registro con valor de $146.300 y en PAGOS_DEL DIA hay dos registros uno con valor de $62.700 y otro con valor de $3.800.Al realizar la consulta duplica el valor de PAGOS_DEL_MES y muestra $292.600 en cambio lo correspondiente a PAGOS_DEL_DIA da la suma.Que hago para que no duplique los registros, es decir que si hay dos o mas registros en una tabla y en la otra haya menos registros que la otra no se sumen en mas de una vez los registros de la tabla que contiene menos. Gracias.

Casimiro Notevi
29-01-2009, 18:15:47
Es normal que se duplique la suma porque has ¡cuadriplicado! el mensaje :)

Jose Roman
29-01-2009, 18:17:15
Que pena con uds. lo que pasa es que tengo instalada en la oficina ese molesto programa IProtecYou, y me causa errores.

duilioisola
29-01-2009, 18:21:46
Creo que la solución será hacer dos select:

select sum(M.VR_RC)
from FACTURA F
join PAGOS_DEL_MES M on M.FACTURA = F.NUMERO_FACTURA
where F.NUMERO_FACTURA = 29680
y
select sum(D.VR_RC)
from FACTURA F
join PAGOS_DEL_DIA D on D.FACTURA = F.NUMERO_FACTURA
where F.NUMERO_FACTURA = 29680


De todos modos, no se si tiene sentido, pues parece que la suma que hay en PAGOS_DEL_DIA es igual a PAGOS_DEL_MES.

Casimiro Notevi
29-01-2009, 18:26:01
Seguramente, al tener 2 registros en una de las tablas te devuelve dos registros también, por eso te suma 2 veces el que tiene un registro, prueba a hacer 2 selects por separado.

Jose Roman
29-01-2009, 18:37:56
Listo, realice las dos consultas por separado y utilice union, pero como estoy realizando un informe de SALDOS, como hago para que sume los dos registros de esta union?, o sera mejor realizar un procedimiento?

ElKurgan
29-01-2009, 19:46:34
¿Que base de datos estas utilizando? Lo digo porque en Oracle se puede hacer esto:


Select sum(Suma) from((select sum(M.VR_RC) Sumafrom FACTURA Fjoin PAGOS_DEL_MES M on M.FACTURA = F.NUMERO_FACTURAwhere F.NUMERO_FACTURA = 29680)union(select sum(D.VR_RC) Sumafrom FACTURA Fjoin PAGOS_DEL_DIA D on D.FACTURA = F.NUMERO_FACTURAwhere F.NUMERO_FACTURA = 29680))

Lo digo de memoria (no tengo a mano el Oracle para probarlo),
asi que no se si me he equivocado en algo

Un saludo

ElKurgan
29-01-2009, 19:48:43
¡Leches!.. .Ya me he equivocado con las etiquetas.

Mis disculpas

Jose Roman
29-01-2009, 21:04:39
Tienes razon me falto decir que bases de datos, es FIREBIRD 2.1