Foros Club Delphi

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

kurono 24-10-2011 02:46:14

Restar en SQL
 
hola amigos como estan necesito una ayuda de ustedes resulta que tengo dos tabla

1- Depositos
2- Retiros

en la cual tengo los campo depositos y retiros cada campo en sus respetiva tablas lo que quiero es sumar todos los registro de ambos campo y luego restarlo esto es haciendo referencia a un cliente
como se haria esto en sql

celades1 24-10-2011 08:55:22

Hola

Código SQL [-]
 
select ((select sum(depositos ) from depositos where cliente_id=:p_cliente)-
(select sum(retiros) from retiros where cliente_id=:p_cliente)) diferencia
from RDB$DATABASE


La tabla RDB$DATABASE es de sistema en firebird que solo tiene un registro ,
pero se puede utilizar qualquier tabla que solo tenga 1 registro o bien una tabla con un where que devuelva 1 regitro

No se si es lo que querias , la explicacion no era muy detallada

Saludos

AzidRain 24-10-2011 21:19:32

Yo lo haria con un join
Código SQL [-]
 SELECT clientes.nombre, SUM(depositos.importe) as total_depositos, SUM(retiros.importe)  as total_retiros, SUM(depositos.importe) - SUM(retiros.importe) as saldo
from
  clientes
JOIN DEPOSITOS ON (DEPOSITOS.num_cliente=clientes.num_cliente)
JOIN RETIROS ON (RETIROS.num_cliente=RETIROS.num_cliente)
GROUP BY CLIENTES.NUM_CLIENTE

Esto asumiendo que tus tablas de depositos y retiros tienen un campo comun que identifica al cliente (o bien un num de cuenta), los campos que utilice son meros ejemplos tendrías que poner los nombres de tus tablas y los campos correctos. Pero Así como te lo puse te lo hace todo en una sola operación, aunque si hablamos de millones de registros la consulta será un poco lenta, por lo que ahi tendrías que cambiar la estrategia, depende del diseño que tengas.

kurono 25-10-2011 01:45:30

probare los dos codigo haber cual me resulta mejor luego les digo

ecfisa 25-10-2011 05:35:51

Hola.

Otra alternativa:
Código SQL [-]
SELECT FIRST 1 CLIENTES.RAZON,
       (SELECT SUM(DEPOSITOS.VALOR) FROM DEPOSITOS WHERE DEPOSITOS.ID_CLIENTE = :CLIENTE) AS DEPOSITADO,
       (SELECT SUM(RETIROS.VALOR) FROM RETIROS WHERE RETIROS.ID_CLIENTE = :CLIENTE) AS RETIRADO,
       (SELECT SUM(DEPOSITOS.VALOR) FROM DEPOSITOS WHERE DEPOSITOS.ID_CLIENTE = :CLIENTE)-
       (SELECT SUM(RETIROS.VALOR) FROM RETIROS WHERE RETIROS.ID_CLIENTE = :CLIENTE) AS SALDO
FROM CLIENTES, DEPOSITOS, RETIROS
GROUP BY CLIENTES.RAZON

Saludos.

kurono 27-10-2011 04:14:51

amigos les cuento que lo e resuelto poniendo los dos campo en una sola tabla
Código SQL [-]
Select Sum(Depositos - Retiros) as Balance where Nombre ='xxx'

asi de simple Gracias de todos modo


La franja horaria es GMT +2. Ahora son las 06:31:48.

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