On 12-09-2012 23:28, Eduardo Almeida wrote:
> 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.
SELECT SUM(total) as receitas_consolidadas, tipo_de_operacao, situacao
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) = 1
GROUP BY tipo_de_operacao, situacao;
Não entendi a dificuldade. Será que entendi sua pergunta corretamente?
Vê se é isso...
Aliás, sua consulta original tem erro. Você não deve agrupar por total
porque é a coluna que você tá consolidando. E não dá pra agrupar por
data_do_recebimento porque não tá listada no SELECT, aí seu date_part
não servirá pra muita coisa também.
Dá pra escrever de outras formas também.
SELECT SUM(total) as receitas_consolidadas, tipo_de_operacao, situacao
FROM tbl_financeiro_fluxo_de_caixa
WHERE
id_conta = ? AND
(tipo_de_operacao = 'C' OR tipo_de_operacao = 'D') AND
(situacao = 'Recebido' OR situacao = 'Pago') AND
date_part('month', data_do_recebimento) = 1
GROUP BY tipo_de_operacao, situacao;
Dá na mesma. Ah, troca a ordem das colunas no SELECT... que fica mais
legível. Pode dar ORDER BY no tipo_de_operacao e situacao pra juntar
mais bonitinho também.
[]s
__________________________________
Flavio Henrique A. Gurgel
Líder de Projetos Especiais
Consultoria, Projetos & Treinamentos 4LINUX
Tel1: +55-11.2125-4747 ou 2125-4748
www.4linux.com.br
email: [email protected]
______________________________
FREE SOFTWARE SOLUTIONS
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral