2012/9/13 Eduardo Almeida <[email protected]>

> -----Original Message-----
> From: Osvaldo Kussama
> Sent: Thursday, September 13, 2012 12:57 AM
> To: Comunidade PostgreSQL Brasileira
> Subject: Re: [pgbr-geral] Soma de coluna com where diferentes
>
> Em 12/09/12, Eduardo Almeida<[email protected]> escreveu:
> >>> Veja CASE em
> >>> http://www.postgresql.org/docs/9.1/static/functions-conditional.html
> >
> > Jean, mas CASE seria para retornar um valor quando uma condição for
> > satisfeita ... realmente não vi como fazer isso usando CASE .. mas
> > obrigado
> >
> >
> >
> >
> >
> >>________________________________
> >> De: Eduardo Almeida <[email protected]>
> >>Para: Comunidade PostgreSQL Brasileira
> >><[email protected]>
> >>Enviadas: Quarta-feira, 12 de Setembro de 2012 23:28
> >>Assunto: [pgbr-geral] Soma de coluna com where diferentes
> >>
> >>Olá senhores, alguma alma caridosa poderia me ajudar a resolver essa
> >>questão? Não precisa ser a solução, pode ser algo para leitura. Já
> quebrei
> >>cabeça aqui e não consigo chegar numa solução.
> >>
> >>Preciso somar todos os valores de uma coluna em circunstâncias diferentes
> >>na
> >>mesma cláusula SQL. Para retratar melhor minha necessidade, vou esboçar a
> >>soma abaixo através de duas cláusulas, vamos lá
> >>
> >>        SELECT SUM(total) as receitas_consolidadas
> >>        FROM tbl_financeiro_fluxo_de_caixa
> >>        WHERE id_conta = ? AND tipo_de_operacao = 'C' AND situacao =
> >>'Recebido' AND date_part('month', data_do_recebimento) = 1
> >>        group by total, data_do_recebimento;
> >>
> >>        SELECT SUM(total) as despesas_liquidadas
> >>        FROM tbl_financeiro_fluxo_de_caixa
> >>        WHERE id_conta = ? AND tipo_de_operacao = 'D' AND situacao =
> >> 'Pago'
> >>AND date_part('month', data_do_pagamento) = 1
> >>        group by total, data_do_pagamento;
> >>
> >>Eu gostaria de otimizar isso e colocar tudo numa só cláusula.
> >>
> >>Obrigado
> >>
> >Tente algo do tipo:
>
> >SELECT
> >SUM(CASE (id_conta = ? AND tipo_de_operacao = 'C' AND situacao =
> >'Recebido' AND date_part('month', data_do_recebimento) = 1) THEN total
> >ELSE 0 ) as receitas_consolidadas,
> >SUM(CAES(id_conta = ? AND tipo_de_operacao = 'D' AND situacao = 'Pago'
> >AND date_part('month', data_do_pagamento) = 1) THEN total else 0) as
> >despesas_liquidadas
> >FROM tbl_financeiro_fluxo_de_caixa;
>
>
> Muito obrigado Osvaldo, consegui seguindo sua dica, do Jean e até mesmo do
> Fábio.
>
>         SELECT
>         SUM( CASE WHEN date_part('month', data_do_recebimento) = 7 THEN
> total ELSE 0 END) AS receitas_consolidadas,
>         SUM( CASE WHEN date_part('month', data_do_pagamento) = 7 THEN total
> ELSE 0 END) AS despesas_liquidadas
>         FROM tbl_financeiro_fluxo_de_caixa
>         WHERE id_conta = ? AND    tipo_de_operacao IN ('C', 'D') AND
> situacao IN ( 'Recebido', 'Pago');
>
>
> Obrigado à todos
>
>
>
Tem certeza que isso está certo? Para mim parece que o retorno de
"receitas_consolidadas" e "despesas_liquidadas" é sempre igual... Ou li
errado?

Acho que você queria algo + ou - assim:

        SELECT
        SUM( CASE tipo_de_operacao WHEN 'C' THEN total ELSE 0 END) AS
receitas_consolidadas,
        SUM( CASE tipo_de_operacao WHEN 'D' THEN total ELSE 0 END) AS
despesas_liquidadas
        FROM tbl_financeiro_fluxo_de_caixa
        WHERE id_conta = ? AND    tipo_de_operacao IN ('C', 'D') AND
situacao IN ( 'Recebido', 'Pago') AND date_part('month',
data_do_recebimento) = 7;

Dica: quando não sabe a consulta, poste um "resultado" de exemplo também,
facilita pra entendermos o que você espera.

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

Responder a