Hola IvanD...
¿¿Que base de datos utilizas???, aunque creo que sin importar cual, debería poderse resolver por SQL la situación asi:
Asumo que tienes dos tablas:
1) Cuentas que debe ser algo como:
PlanDeCuentas:
CodCuenta, Descripción
1 Activo,
1.1 activo fijos
1.1.1 caja
1.1.1.1 caja general
Asumo que debes tener una tabla de asientos o movimientos, algo como:
Movimientos:
Id.Cpbte, Fecha, cuentaMov, Valor
1,2012-04-28,'1.1.1.1', 100,
2,2012-04-29,'1.1.1.1', 200,
3,2012-04-28,'1.1.1.2', 500,
Como las cuentas son strings y manejan dentro de si la jerarquia, puedes hacer una consulta asi:
Código SQL
[-]Select AA.CodCuenta, AA.Descripción, (Select sum(BB.Valor) from Movimientos BB where (BB.cuentaMov like AA.CodCuenta||'%') and (Fecha between :F1 and :F2))
from PlanDeCuentas AA
La clave está en que puedes utilziar una conslta anidada, que traiga siempre la sumatoria de todos los moviemientos que comiencen por la cuenta que llamas...
Puedes probar la conulsta sola en tu tabla de movimientos con:
Código SQL
[-]Select sum(Valor)
from Movimientos
where (cuentaMov like '1.1.%')
and (Fecha between F1 and F2)
este es un ejemplo en SQL Server que te ayuda con el ejercicion
Código SQL
[-]select SUM(valor) from (
select *
from (
select 1 as idcpbte, '1.1.1.1' as cuenta, 100 valor union
select 2 as idcpbte, '1.1.1.1' as cuenta, 200 valor union
select 3 as idcpbte, '2.1.1.1' as cuenta, 500 valor
) as C2
where cuenta like '2.1.%' -- Modifica aqui el valor que quieres probar...
) as C3
Espero que sea lo que buscabas y que te haya servido