Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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!
>
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.
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
>
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!
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?
>
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!
as subquerys devem ser as tabelas do from