Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jack's

[Resolvido] Select comparando a soma de duas tabelas, como fazer?

Recommended Posts

Para mim está complicado até de explicar, mas vou tentar.

Tenho um tabela vales e outra tabela baixavales com vários registros que totalizam o valor do vale. Preciso fazer uma consulta sql que me retorna o registro da tabela vale que mesmo depois de encontrado e somado todos registros da tabela baixa vales, tenha ainda saldo. Conseguiram entender?

 

Abaixo o exemplo

 

Tabela: vales

---------------------------------------

| id_vale | id_func_vale | valor_vale |

---------------------------------------

| 1 | 1 | 400.00 |

| 2 | 2 | 300.00 |

| 3 | 2 | 100.00 |

---------------------------------------

 

Tabela: valesbaixa

------------------------------------------

| id_baixa | id_vale_baixa | valor_baixa |

------------------------------------------

| 1 | 1 | 200.00 |

| 2 | 1 | 100.00 |

| 3 | 2 | 300.00 |

| 4 | 3 | 50.00 |

------------------------------------------

 

Tabela: funcionarios

-----------------------

| id_func | nome_func |

-----------------------

| 1 | João |

| 2 | Paulo |

-----------------------

 

EU QUERO QUE A BUSCA ME RETORNE:

-----------------------------------------

|nome |id_vale| valor vale | saldo_vale |

-----------------------------------------

|João | 1 | 400.00 | 100.00 |

|Paulo| 3 | 100.00 | 50.00 |

-----------------------------------------

 

Entenderam? O vale de id=2 tinha o total de baixas igual ao valor dele, daí esse não é retornado, apenas os que tiverem saldo à baixar.

 

Tentei fazer select com subqueries assim:

 

SELECT id_vale, id_func_vale, SUM(valor_vale) AS saldo_vales FROM vales WHERE SUM(valor_vale) > (SELECT SUM(valor_baixa) AS total_baixa FROM valesbaixa WHERE id_vale_baixa = id_vale) AND id_func_vale=$id_func[$z] GROUP BY id_func_vale

 

Não funcionou...

Estou perdido e preciso da ajuda de vocês!

Compartilhar este post


Link para o post
Compartilhar em outros sites

as subquerys devem ser as tabelas do from

 

Olá Giesta, poderia me explicar melhor? As eu não coloco o FROM na subquery e menciono a tabela da subquery na query principal? É isso? Se puder montar um exemplo me ajudaria muito...

 

Obrigado novamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

algo assim q você tem q fazer

 

select a.id , a.tot_saldo, b.tot_baixa

from

(select id, sum(saldo) tot_saldo from vale group by id) a ,

(select id, sum(baixa) tot_baixa from baixa group by id) b

where

a.id = b.id

and tot_saldo > tot_baixa

Compartilhar este post


Link para o post
Compartilhar em outros sites

algo assim q você tem q fazer

 

select a.id , a.tot_saldo, b.tot_baixa

from

(select id, sum(saldo) tot_saldo from vale group by id) a ,

(select id, sum(baixa) tot_baixa from baixa group by id) b

where

a.id = b.id

and tot_saldo > tot_baixa

 

VOCÊ É O CARA!!!! Deu certo velho! Nem acredito, valeu mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz cara, surgiu um novo problema depois de alguns testes... Se não houver pelo menos um registro de baixa equivalente, ele não retorna o vale, e eu preciso que ele me retorne o vale mesmo que o saldo de baixa seja zero...

 

Conseguiu entender? Pode me ajudar em mais essa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz cara, surgiu um novo problema depois de alguns testes... Se não houver pelo menos um registro de baixa equivalente, ele não retorna o vale, e eu preciso que ele me retorne o vale mesmo que o saldo de baixa seja zero...

 

Conseguiu entender? Pode me ajudar em mais essa?

 

Depois de tanto quebrar a cabeça, consegui resolver com uma "gambiarrinha" usando LEFT JOIN. o SQL Original ficou assim:

 

SELECT v.id_vale, v.id_func_vale,v.valor_liberado_vale, b.total_baixa FROM vales v LEFT JOIN (SELECT id_baixa, id_vale_baixa, SUM(valor_baixa) total_baixa FROM valesbaixa GROUP BY id_vale_baixa) b ON v.id_vale = b.id_vale_baixa WHERE (v.valor_liberado_vale > b.total_baixa OR v.valor_liberado_vale = v.valor_liberado_vale) AND id_func_vale = $id_func[$z]

 

Bangunça né? Mas agora ta funcionando certinho... Vlw pela ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.