PDA

Ver la Versión Completa : Consulta SQL de saldos


FlacoNet
12-06-2003, 22:22:52
Hola...estoy hace un tiempo sin darle una solucion a mi problema.
Les cuento:
Tengo dos tablas(uso interbase 7 y delphi 6), una de debitos (id_cliente, importe)y otra de creditos (id_cliente, importe) entre otros campos.
En la de debitos agrego un registro cuando viene un cliente y me encarga algo anotando en el registro importe su valor. Y como es de deducir en la tabla creditos agrego registros con el importe de lo que me pagan..Van entendiendo hasta aqui?
Entonces lo que quiero hacer es sumar la columna importe de debitos y restarla con la suma de la columna importe de la tabla creditos para cada cliente.
Escribo la consulta detallada a continuacion pero ahora no se como hacer para hacer un 'GROUP BY id_client' del resultado.

select clientes.id_client , nombre, sum(import)*-1 as Saldo
from clientes inner join debitos
on clientes.id_client = debitos.id_client
group by clientes.id_client , nombre
UNION
select clientes.id_client , nombre, sum(import) as Saldo
from clientes inner join creditos
on clientes.id_client = creditos.id_client
group by clientes.id_client , nombre

La solucion que hasta ahore le encontre pero que no me convence es escribir el codigo anterior en un procedimiento almacenado sp_saldo y luego en un componente de consulta en delphi escribir lo siguiente en la propiedad SQL:

select id_cliente,nombre,sum(saldo) Saldo from sp_saldos
group by id_cliente,nombre
having sum(saldo) <> 0
order by nombre

Es decir, lo utilizaria al procedimiento como tabla y sobre el resultado desde aqui SI podria hacer otro GROUP BY. el problema es que debo desglosar el codigo y quiero meterlo todo en el procedimiento almacenado.....

Muchas gracias por su tiempo....

obiwuan
12-06-2003, 23:13:16
En un hilo anterior en el foro de impresión, comenté (aunque con otras palabras) que cuando me encuentro con este problema (el tener que hacer UNION) lo resuelvo creando tablas temporales
create temporary table tabla (campos)
insert into tabla select campos from XXX etc
insert into tabla select campos from YYY ect
y luego trabajo con esa tabla temporal tal como deseo, GROUP BY, WHERE... en fin lo que necesito de ella.

En tiempo de diseño conviene hacer esa tabla temporal permanente, y luego, cuando ya lo tienes diseñado, hacerla temporal

Es una solución diferente a la que planteas pero que a la postre te resuelve el problema.

Ventajas: Cuando hay que añadir otra tabla diferente, la programación está prácticamente hecha.

FlacoNet
13-06-2003, 07:20:37
.