Ir para conteúdo
Fórum Script Brasil
  • 0

Como Fazer Esse Select ?


jarbas_softtec

Pergunta

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

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...