Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Suma duplicada... (https://www.clubdelphi.com/foros/showthread.php?t=63104)

Jose Roman 29-01-2009 18:12:33

Suma duplicada...
 
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:
Código SQL [-]
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:
Código SQL [-]
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:

Código:

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


La franja horaria es GMT +2. Ahora son las 21:02:14.

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