jarbas_softtec Postado Setembro 18, 2007 Denunciar Share Postado Setembro 18, 2007 Pessoal, boa tarde , eu tenho 2 tabelas : Tabela A contendo : dtvenc - Valor01/09/07 - 100,0001/09/07 - 20,002/09/07 - 110,0002/09/07 - 40,0005/09/07 - 120,0010/09/07 - 90,00 Tabela B contendo : dtvenc - Valor01/09/07 - 100,0001/09/07 - 50,0002/09/07 - 100,0002/09/07 - 60,0003/09/07 - 100,0004/09/07 - 50,0010/09/07 - 10,00 Como fazer um SQL q me retorne a tabela : DTVENC - ENTRADA (TABELA A) - SAIDA (TABELA B)01/09/07 - 120,00 150,0002/09/07 - 150,00 160,0003/09/07 - 0,00 100,0004/09/07 - 0,00 50,0005/09/07 - 120,00 0,0010/09/07 - 90,00 10,00 Isso é possivel ??? já usei :SELECT A.DTVENC,SUM(A.VALOR),SUM(B.VALOR) FROM A INNER JOIN B ON A.DTVENC=B.DTVENC GROUP BY A.DTVENC ORDER BY A.DTVENC só retorna os dados que tem nas duas tabelas isto é dia 1,2 e 10 . Se eu usar left join ele retorna os dias 1,2,5 e 9 Se alguém puder me ajudar ficarei grato.AbsJarbas Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 19, 2007 Denunciar Share Postado Setembro 19, 2007 SELECT A.DTVENC,SUM(A.VALOR),SUM(B.VALOR) FROM A INNER JOIN B ON A.DTVENC=B.DTVENC GROUP BY A.DTVENC ORDER BY A.DTVENC só retorna os dados que tem nas duas tabelas isto é dia 1,2 e 10 .Esse é um bom exercício para se treinar Junções. Tenta assim:SELECT A.DTVENC,SUM(A.VALOR),SUM(B.VALOR) FROM A FULL OUTER JOIN B ON A.DTVENC=B.DTVENC GROUP BY A.DTVENC ORDER BY A.DTVENC ;) Link para o comentário Compartilhar em outros sites More sharing options...
0 jarbas_softtec Postado Setembro 19, 2007 Autor Denunciar Share Postado Setembro 19, 2007 Kandrade, muito obrigado mas deu erro :You havea an error in your SLQ syntax; check the manual that corresponds to your MySql server version for the right syntax to use near 'full outer join duplipag p on r.dtvenc=p.dtvenc' at line 1Pessoal, boa tarde , eu tenho 2 tabelas : Tabela A contendo : dtvenc - Valor01/09/07 - 100,0001/09/07 - 20,002/09/07 - 110,0002/09/07 - 40,0005/09/07 - 120,0010/09/07 - 90,00 Tabela B contendo : dtvenc - Valor01/09/07 - 100,0001/09/07 - 50,0002/09/07 - 100,0002/09/07 - 60,0003/09/07 - 100,0004/09/07 - 50,0010/09/07 - 10,00 Como fazer um SQL q me retorne a tabela : DTVENC - ENTRADA (TABELA A) - SAIDA (TABELA B)01/09/07 - 120,00 150,0002/09/07 - 150,00 160,0003/09/07 - 0,00 100,0004/09/07 - 0,00 50,0005/09/07 - 120,00 0,0010/09/07 - 90,00 10,00 Isso é possivel ??? já usei :SELECT A.DTVENC,SUM(A.VALOR),SUM(B.VALOR) FROM A INNER JOIN B ON A.DTVENC=B.DTVENC GROUP BY A.DTVENC ORDER BY A.DTVENC só retorna os dados que tem nas duas tabelas isto é dia 1,2 e 10 . Se eu usar left join ele retorna os dias 1,2,5 e 9 Se alguém puder me ajudar ficarei grato.AbsJarbas Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 19, 2007 Denunciar Share Postado Setembro 19, 2007 Realmente full join não funciona no mysql. Olhe a sintaxe de junções no mysql:http://dev.mysql.com/doc/refman/5.0/en/join.htmlOlhe isso também:http://bugs.mysql.com/bug.php?id=15457 Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Setembro 20, 2007 Denunciar Share Postado Setembro 20, 2007 Olá pessoal!Olha, como estou sem tempo para criar os seus dados em algum bd, peguei parte da query que uso para fazer um fluxo de caixa (cruzamento do contas a receber com o contas a pagar).A idéia é: como listar, na mesma query, o que eu tenho a receber em um período, relacionado com o que eu tenho a pagar no mesmo período... sendo que há datas com valores coincidentes nas tabelas e há datas que não coincidem... então, o jeito é usar subqueries, com o "union" em troca do join...a) Query que totaliza os valores do contas a receber:select sum(prvalo) rec_valor, 0 as pag_valor, prdata dataref from `acme`.`a_receber` where prdata between "2007/05/01" and "2007/05/30" group by dataref Isso retorna rec_valor pag_valor dataref 132,00 0,00 01/05/2007 40,00 0,00 07/05/2007 81,40 0,00 08/05/2007 42,30 0,00 23/05/2007 B) Query que totaliza os valores do contas a pagar: select 0 as rec_valor, sum(prvalo) pag_valor, prdata dataref from `acme`.`a_pagar` where prdata between "2007/05/01" and "2007/05/30" group by dataref Isso retorna rec_valor pag_valor dataref 0,00 170,00 01/05/2007 0,00 1618,59 02/05/2007 0,00 550,00 08/05/2007 0,00 1164,01 11/05/2007 0,00 34,39 18/05/2007 0,00 1164,68 23/05/2007 c) juntando as duas, temos: select sum(prvalo) rec_valor, 0 as pag_valor, prdata dataref from `acme`.`a_receber` where prdata between "2007/05/01" and "2007/05/30" group by dataref union select 0 as rec_valor, sum(prvalo) pag_valor, prdata dataref from `acme`.`a_pagar` where prdata between "2007/05/01" and "2007/05/30" group by dataref Isso retorna rec_valor pag_valor dataref 132,00 0,00 01/05/2007 40,00 0,00 07/05/2007 81,40 0,00 08/05/2007 42,30 0,00 23/05/2007 0,00 170,00 01/05/2007 0,00 1618,59 02/05/2007 0,00 550,00 08/05/2007 0,00 1164,01 11/05/2007 0,00 34,39 18/05/2007 0,00 1164,68 23/05/2007 d) Agora, o toque final... vamos agrupar o resultado anterior pela coluna "dataref": select sum(rec_valor) rec_valor, sum(pag_valor) pag_valor, dataref from ( select sum(prvalo) rec_valor, 0 as pag_valor, prdata dataref from `acme`.`a_receber` where prdata between "2007/05/01" and "2007/05/30" group by dataref union select 0 as rec_valor, sum(prvalo) pag_valor, prdata dataref from `acme`.`a_pagar` where prdata between "2007/05/01" and "2007/05/30" group by dataref ) as subquery group by dataref Isso retonará o que precisamos: rec_valor pag_valor dataref 132,00 170,00 01/05/2007 0,00 1618,59 02/05/2007 40,00 0,00 07/05/2007 81,40 550,00 08/05/2007 0,00 1164,01 11/05/2007 0,00 34,39 18/05/2007 42,30 1164,68 23/05/2007Bom... isso tudo funciona no MySQL5... no SQL que acompanha a BDE da Borland(SQL92...) também, sendo que as subqueries precisam ser gravadas separadamenteem arquivos texto previamente... nos demais "dialetos", não sei te dizer... mas creio que deva funcionar também...Ok?(e se der certo, não deixa de marcar como resolvido, ok?) Link para o comentário Compartilhar em outros sites More sharing options...
0 paulobergo Postado Setembro 21, 2007 Denunciar Share Postado Setembro 21, 2007 Oi Kandrake.Ao tentar responder sua mensagem, recebi isto:"Não conseguimos localizar nenhum membro que correspondesse ao que você digitou, por favor verifique o valor digitado antes de enviar novamente"Qual o motivo? Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Setembro 21, 2007 Denunciar Share Postado Setembro 21, 2007 Oi Kandrake.Ao tentar responder sua mensagem, recebi isto:"Não conseguimos localizar nenhum membro que correspondesse ao que você digitou, por favor verifique o valor digitado antes de enviar novamente"Qual o motivo?É kandrade :lol: []s Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
jarbas_softtec
Pessoal, boa tarde , eu tenho 2 tabelas :
Tabela A contendo :
dtvenc - Valor
01/09/07 - 100,00
01/09/07 - 20,0
02/09/07 - 110,00
02/09/07 - 40,00
05/09/07 - 120,00
10/09/07 - 90,00
Tabela B contendo :
dtvenc - Valor
01/09/07 - 100,00
01/09/07 - 50,00
02/09/07 - 100,00
02/09/07 - 60,00
03/09/07 - 100,00
04/09/07 - 50,00
10/09/07 - 10,00
Como fazer um SQL q me retorne a tabela :
DTVENC - ENTRADA (TABELA A) - SAIDA (TABELA B)
01/09/07 - 120,00 150,00
02/09/07 - 150,00 160,00
03/09/07 - 0,00 100,00
04/09/07 - 0,00 50,00
05/09/07 - 120,00 0,00
10/09/07 - 90,00 10,00
Isso é possivel ???
já usei :
SELECT A.DTVENC,SUM(A.VALOR),SUM(B.VALOR) FROM A INNER JOIN B ON A.DTVENC=B.DTVENC GROUP BY A.DTVENC ORDER BY A.DTVENC
só retorna os dados que tem nas duas tabelas isto é dia 1,2 e 10 .
Se eu usar left join ele retorna os dias 1,2,5 e 9
Se alguém puder me ajudar ficarei grato.
Abs
Jarbas
Link para o comentário
Compartilhar em outros sites
6 respostass a esta questão
Posts Recomendados