Ir para conteúdo
Fórum Script Brasil
  • 0

Consulta Complicada


Giuliano Rezende

Pergunta

Olá Pessoal, gostaria de uma ajuda pra seguinte consulta que preciso fazer:

Tenho tres tabelas:

TAB : CAMPOS

aplicacoes: data,banco,valor

resgates : data,banco,valor

rendimentos: data,banco,valor

Preciso de uma consulta que me traz o seguinte:

mes/ano | banco | valor aplicado | valor resgatado | valor rendido

Explicação: A data que tem nas tabelas é diária, mas preciso agrupar por mes do ano. Também preciso agrupar por banco. então preciso que a consulta me retorne os um acúmulo (soma) dos valores aplicados, dos resgatados e dos rendidos de cada banco em cada mes do ano, seria assim:

mes/ano | banco | valor aplicado | valor resgatado | valor rendido

01/2008 | 1 | soma dos val. | soma dos val. | soma dos val.

02/2008 | 1 | soma dos val. | soma dos val. | soma dos val.

.

.

01/2008 | 2 | soma dos val. | soma dos val. | soma dos val.

03/2008 | 3 | soma dos val. | soma dos val. | soma dos val.

Detalhe: Seria elegante não aparecer o mes referente se não tiver nenhuma aplicacao,resgate ou rendimento nele né...

Entenderam? Alguém tem uma luz? To penando com isso, to olhando junções, uniões mas até agora não cheguei a uma solução. Aguardo a ajuda de vocês. Abraços!

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Oi, 'Giuliano Rezende

A data e o banco são constantes nas 3 tabelas? Ouseja para o banco x na data y há registros nas 3 tabelas, sempre?

Olá amigo! Não, isso não acontece.

Eu tenho outra tabela com os bancos cadastrados, então banco é uma chave estrangeira em cada uma das três tabelas. A data é simplesmente a data da aplicaçao, do resgate ou do rendimento. Estou dizendo isso só pra ter mais informação... Mas respondendo a sua pergunta, não. Eu posso ter aplicação em determinada data e em determinado banco, mas não necessiariamente terei um resgate ou um rendimento nessa mesma data e banco. Vale o mesmo pros três, ou seja, eu posso ter só uma aplicação, só uma aplicação e um resgate.. e assim sucessivamente...

Obrigado!

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, peço ajuda em um select que estou tentando fazer, já pesquisei bastante e não consegui fazer.

Seguinte: tenho três tabelas, aplicacoes,resgates e rendimentos. Cada uma delas tem um campo banco,e outro valor.

Preciso pegar a soma de todos os valores de cada tabela, mas de cada banco, ou seja, preciso do valor acumulado das aplicacoes,dos resgastes e dos rendimentos de cada banco. Pois desses valores, preciso dar uma saldo, que é a soma de todas as aplicacoes com todos os rendimentos, menos todos os resgates. Assim:

(sum(aplicacoes.valor) + sum(rendimentos.valor)) - sum(resgates.valor).

Não consegui resolver com um union, pois preciso saber qual é valor aplicado, o resgatado, e o rendido.

Com algo assim:

SELECT sum(valor) FROM aplicacoes where banco = cod_banco_procurado Union

SELECT sum(valor) FROM resgates where banco = cod_banco_procurado Union

SELECT sum(valor) FROM rendimentos where banco = cod_banco_procurado

Não adianta, pois me traz os valores certos, mas não tem como obter qual é o valor aplicado,o resgatado e o rendido, pois simplesmente traz uma tabela com os valores juntos, com os resultados "concatenados".

Tentei também isso:

select sum(aplicacoes.valor),sum(resgates.valor),sum(rendimentos.valor) from aplicacoes,resgates,rendimentos where aplicacoes.banco = cod_banco_procurado

or resgates.banco = cod_banco_procurado or rendimentos.banco = cod_banco_procurado

Mas me traz o resultado errado, pois pelo que li, me parece que ele tenta combinar linha por linha de cada tabela, e dá um valor bem maior. Como contornar isso?

Alguém ajude por favor...?

Será que terei que realizar três consultas ao banco? pegando a soma de cada tabela por vez... Não quero fazer isso, quero resolver com uma só consulta...

Aguardo, obrigado.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi 'Giuliano Rezende'

Tenta assim:

SELECT b.banco, aplicacao, resgate, rendimento 
FROM banco b
LEFT JOIN (SELECT banco, SUM(valor) as aplicacao FROM aplicacoes GROUP BY banco) a ON a.banco = b.banco
LEFT JOIN (SELECT banco, SUM(valor) as resgate FROM resgates GROUP BY banco) rs ON rs.banco = b.banco
LEFT JOIN (SELECT banco, SUM(valor) as rendimento FROM rendimentos GROUP BY banco) re ON re.banco = b.banco

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...