Jack's 0 Denunciar post Postado Outubro 18, 2009 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
giesta 29 Denunciar post Postado Outubro 18, 2009 as subquerys devem ser as tabelas do from Compartilhar este post Link para o post Compartilhar em outros sites
Jack's 0 Denunciar post Postado Outubro 18, 2009 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
giesta 29 Denunciar post Postado Outubro 19, 2009 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
Jack's 0 Denunciar post Postado Outubro 19, 2009 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
Jack's 0 Denunciar post Postado Outubro 19, 2009 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
Jack's 0 Denunciar post Postado Outubro 19, 2009 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