Código SQL
[-]CREATE PROCEDURE SUMATOTAL (
PER INTEGER,
EST INTEGER)
RETURNS (
TOTAL FLOAT,
CODAFILIADO INTEGER,
FECHAMOD DATE,
MONTO FLOAT,
MOTNOPAGO INTEGER,
PAGO VARCHAR(1),
USUARIO INTEGER,
CODIGO INTEGER,
NOMBREYAPELLIDO VARCHAR(50),
NRODOC INTEGER,
APORTA VARCHAR(1),
CUIL VARCHAR(25),
CODPERIODO INTEGER,
NROESTAB INTEGER)
AS
begin
total = 0;
For SELECT DISTINCT APORTESAFI.Codafiliado, APORTESAFI.Fechamod, APORTESAFI.Monto, APORTESAFI.Motnopago, aportesafi.Codperiodo,
Aportesafi.Pago, APORTESAFI.Usuario, APORTESAFI.Codigo, aportesafi.Nroestab, AFILIADOS.NOMBREYAPELLIDO , AFILIADOS.NRODOC, AFILIADOS.APORTA, AFILIADOS.CUIL
FROM APORTESAFI
INNER JOIN AFILIADOS ON (APORTESAFI.CODAFILIADO = AFILIADOS.CODIGOAFILIADO)
WHERE
(
(APORTESAFI.CODPERIODO = :PER)
and
(APORTESAFI.NROESTAB = :EST)
)
ORDER BY APORTESAFI.NROESTAB, NOMBREYAPELLIDO
INTO :Codafiliado, :Fechamod, :Monto, :Motnopago, :codperiodo, :Pago, :Usuario, :Codigo, :nroestab, :NOMBREYAPELLIDO , :NRODOC, :APORTA, :CUIL DO
BEGIN
total = :total + :monto;
end
suspend;
end
Tan fácil como cambiar el suspend del bucle, así realiza la sumatoria de todos los registros y solo devuelve datos al finalizar, cuando ya se tiene el monto total.
Saludos