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 (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda