He tenido que buscar tus últimos mensajes para ver qué Bases de datos usas. Si es Firebird, usa un procedimiento almacenado. Será más fácil.
Código SQL
[-]
CREATE PROCEDURE Saldos()
RETURNS (
cuenta varchar(..)
saldo NUMERIC(10,2))
AS
declare variable saldod numeric(10,2);
declare variable cuentad varchar(...);
declare variable saldoh numeric(10,2);
declare variable cuentah varchar(...);
begin
for select cuentad , sum(importe) as saldod
from diario
where cuentad like '4%'
group by cuentad having sum(importe)>99.99
into :cuentad, :saldod do // guardamos el registro en esas 2 variables
begin
for select cuentah, sum(importe) as saldoh
from diario
where cuentah = :cuentad
group by cuentah having sum(importe)>99.99
into :cuentah , :saldoh do
begin
if :saldoh > :saldod then
:saldo := saldoh
else
:saldo := saldod;
:cuenta := cuentah;
Suspend; // devolvemos cuentah que es igual que cuentad
//y el saldo mayor de los dos
end;
end;
Lo que hace un
For select ... into ... do es buscar cada registro y guardarlo en las variables que van despues de la palabra reservada "
into", como ves, después hay otro
for select ... into que busca la
misma cuenta en el Haber, guardamos ambos saldos, se compara para saber quien es el mayor y por último se devuelve con Suspend los valores en sus parámetros de salida (que son los que vienen después del
RETURNS)
La explicación es algo liosa, tendrás que masticar un poco las sentencias que he puesto
de memoria, por tanto, no seas muy duro conmigo
.
después en Delphi, solo tienes que hacer:
Código Delphi
[-]
query1.sql.text := 'select * from saldos';
query1.Open;
PD: Si antes estabas de color verde pálido, ahora cambiarás a violeta
Saludos