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

Responder a