2014-09-04 23:21 GMT-03:00 Paulo Pereira <[email protected]>:

> Tenho duas tabelas: Tabela Saldos das Contas e Tabela Saidas. EX:
> TABELA SALDOS:
> CONTA|SALDO
> 200  | 200.00
> 201  | 500.00
>
> Tenho o seguinte sentença que me retorna a soma das contas, como segue:
> SELECT row_number() OVER(PART BY conta ORDER BY conta,valor),
>     setor,
>     valor,
>     conta,
>     SUM(valor) OVER(PART BY conta ORDER BY conta,valor) as Total
> FROM saidas
> ORDER BY conta.
>
> RETORNO:
> 1-1-200-50.00-50.00
> 2-1-200-60.00-110.00
> 3-1-200-50.00-160.00
> 1-1-201-80.00-80.00
> 2-1-201-40.00-120.00
> 3-1-201-30.00-150.00
>
> Preciso buscar o saldo de cada conta da tabela saldos para ficar assim:
> SALDO  200.00
> 1-1-200-50.00-250.00
> 2-1-200-60.00-310.00
> 3-1-200-50.00-360.00
> SALDO  500.00
> 1-1-201-80.00-580.00
> 2-1-201-40.00-620.00
> 3-1-201-30.00-650.00
>
> Alguem pode dar uma dica ?
>


Eu faria usando UNION ALL, da seguinte forma:

    SELECT 1 AS tipo,
        NULL::bigint,
        NULL::integer AS setor,
        NULL::numeric AS valor,
        conta,
        saldo AS Total
    FROM saldo
    UNION ALL
    SELECT 2 AS tipo,
        row_number() OVER(PARTITION BY conta ORDER BY valor),
        setor,
        valor,
        conta,
        SUM(valor) OVER(PARTITION BY conta ORDER BY valor) as Total
    FROM saidas
    ORDER BY conta, tipo, valor

Assim, na aplicação você só itera os registros (que já virão ordenados),
quando tipo for 1 é "saldo", quando tipo for 2 é "conta".

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a