Jump to content
Fórum Script Brasil
  • 0

Como Fazer Esse Select ?


jarbas_softtec
 Share

Question

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 to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0
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 to comment
Share on other sites

  • 0

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 1

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 to comment
Share on other sites

  • 0

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/2007

Bom... isso tudo funciona no MySQL5... no SQL que acompanha a BDE da Borland

(SQL92...) também, sendo que as subqueries precisam ser gravadas separadamente

em 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 to comment
Share on other sites

  • 0

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 to comment
Share on other sites

  • 0
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 to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.7k
×
×
  • Create New...