Hola. Te paso un query recursivo para que veas si te sirve.
with cte_grupos as ( with recursive rec_grupo (grupo, intermedio, sub) as -- obtener todos los subgrupos de un grupo ( select distinct grupo, grupo, grupo from pruebas -- Incluir al mismo grupo como subgrupo union all select grupo, grupo, cuenta from pruebas -- Incluir los grupos iniciales definidos como tales (clase = 'G') where clase = 'G' union all select rg.grupo, p.grupo, p.cuenta -- Recorrer recursivamente los subgrupos basado en el campo cuenta de los grupos from pruebas p join rec_grupo rg on (p.grupo = rg.sub) where p.clase = 'G' ) select distinct grupo, sub from rec_grupo -- Eliminar duplicados ) select g.grupo, sum (case when signo = '-' then importe * -1 else importe end) total -- Acumular los importes de los registros de clase 'C' from cte_grupos g join pruebas p on g.sub = p.grupo where p.clase = 'C' group by g.grupo order by g.grupo grupo | total --------------+------- 01 | 200 02 | 250 03 | 249 04 | 249 05 | 1249 (5 rows) Una cosa no me queda claro... Que significa el '-' en los registros de tipo 'G' ? Dependiendo de tu respuesta quizas se deba hacer una modificación. Otro aspecto a considerar es el desempeño del query cuando hay muchos registros. Otras personas en esta lista te podrán aconsejar mejor en ese ambito Saludos, Walter 2016-10-20 15:59 GMT-03:00 Kernel <jucab...@gmail.com>: > El 20/10/2016 a las 19:47, Alvaro Herrera escribió: > >> Kernel escribió: >> >>> >>> Hola, >>> no se si postgres permite una consultas recursivas. >>> >> >> WITH RECURSIVE >> https://www.postgresql.org/docs/9.5/static/sql-select.html#AEN86770 >> >> No tengo tiempo de construir una consulta a partir de tu ejemplo ahora, >> pero sí se puede. >> >> > Ok, voy a ver si entiendo como funciona , de todas formas si alguien tiene > un ejemplo sencillo le estaría muy agradecido ... > > Gracias > > > - > Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org > ) > Para cambiar tu suscripción: > http://www.postgresql.org/mailpref/pgsql-es-ayuda >