Ver Mensaje Individual
  #9  
Antiguo 26-04-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
Te voy a dar unas directrices, porque de Firebird no conozco demasiado, aunque sé que se puede hacer, no sé exactamente cómo.

1.- Crea una procedure con dos parámetros
Código SQL [-]
create procedure saldo_inicial( pcuenta, año )
variable saldo_inicial

select sum(debe)-Sum(haber) into saldo_inicial 
from Saldos where cuenta =   pcuenta and fecha < 01/01/año
return saldo_inicial

Con esto consigues el saldo al 1 de enero. Si en el asiento de apertura tienes el saldo, no necesitarías hacerlo.

2.- utiliza el case o lo que corresponda en tu motor de BBDD
Código SQL [-]
select cuenta, saldo_inicial ( cuenta, 2007) as saldo_inicial,
         sum( case month(fecha ) =1 then debe-haber else 0 ) as enero,
         sum( case month(fecha ) = 2then debe-haber else 0 ) as febrero,
         sum( case month(fecha ) = 3 then debe-haber else 0 ) as marzo,
...
         sum( case month(fecha ) =12 then debe-haber else 0 ) as Diciembre

form Saldos
where fecha between 01/01/2007 and 31/12/2007
GROUP BY CUENTA
Esto te devuelve
Cuenta, saldo inicial, Enero, Febrero, ... Diciembre

por cada cuenta si no lo filtras

y a partir de ahí, lo que quieras. La verdad es que queda bastante elegante.

Observa que he escrito el código 'a pelo' y que seguro tiene errores.

En un post similar puse un ejemplo que funciona.
http://www.clubdelphi.com/foros/show...+enero+febrero

Suerte y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita