El 21/10/2016 a las 19:44, Cachique escribió:
Hola.Disculpa que te contacte directo a tu mail pero coloque en la lista de ayuda un query que soluciona tu problema y es como si no lo hubieras visto. Hace un tiempo que tengo la impresion de que mis mensajes no llegan a la lista por alguna razon y tampoco me genera un error de envio. Podrias confirmar si recibiste desde la lista un mensaje de mi direccion con el query que pides? De cualquier manera te lo copio aqui pero esa confirmacion de llegada será muy importante para mi. Saludos, Walter Query Recursivo 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)
Lo primero darte las gracias por tu ayuda, vi tu correo, pero a primera vista (NO TENIA ni idea de recursividad, ahora un pelin) pensé que no era buena solución, al ver el primer select con los 3 grupos asocie los 3 grupos a los niveles de profundidad.
Algunos totales no están bien, si te fijas hay que tener en cuenta cuando los grupos son negativos, el 04 y el 05 no están bien
Le estoy dando vueltas a ir sacando las cuentas teniendo en cuenta el signo del grupo, de tal forma que si la cuenta y el grupo que le llaman son negativos , poner singo a ' ' y en el momento que solo sea negativo uno de ellos poner el signo negativo, de esta forma al final la cuenta suma o resta.
Gracias otra vez - Enviado a la lista de correo pgsql-es-ayuda ([email protected]) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda
