Fórum Ajuda em SQL. #230317
06/05/2004
0
Bom dia a todos, Pessoal sou novo no Firebird, e estou migrando um aplicação de Clipper/DBF para Delphi/Firebird. Estou com o dificuldades para montar uma consulta que vai reunir 3 tabelas com a seguinte estrutura, resumida.
[b:512b44ddad]
Produtos: PROCOD(PK)PRODES PROPRC
Fornecedor:FORCOD(PK),FORNOM
Vendas: MOVDOC(PK),MOVDAT
Itens : MOVDOC+MOVITEM(PK), MOVDOC,FORCOD,PROCOD,ITEQDE,PROPRC
[/b:512b44ddad]
Estou querendo montar uma query onde obtenha as seguintes colunas para um determinado Fornecedor num intervalo entre duas datas, ou seja o usuário vai me indicar o fornecedor, data inicial e data final
Meu problema é que na tabela de itens existem produtos de diferentes fornecedores.
Se alguém puder me ajudar desde já sou muito grato
Fausto
[b:512b44ddad]
Produtos: PROCOD(PK)PRODES PROPRC
Fornecedor:FORCOD(PK),FORNOM
Vendas: MOVDOC(PK),MOVDAT
Itens : MOVDOC+MOVITEM(PK), MOVDOC,FORCOD,PROCOD,ITEQDE,PROPRC
[/b:512b44ddad]
Estou querendo montar uma query onde obtenha as seguintes colunas para um determinado Fornecedor num intervalo entre duas datas, ou seja o usuário vai me indicar o fornecedor, data inicial e data final
Data Nº Venda Produto Qtde Prç Unit Total MOVDAT, MOVDOC, PRODES, ITEQDE, PROPRC, (ITEQDE*PROPRC)
Meu problema é que na tabela de itens existem produtos de diferentes fornecedores.
Se alguém puder me ajudar desde já sou muito grato
Fausto
Faustoalves
Curtir tópico
+ 0
Responder
Posts
06/05/2004
Emerson Nascimento
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc),
          fornec.fornom
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
left join forncecedor fornec on (fornec.forcod = itens.forcod)
where (mov.movdat between :dataini and :datafim)
    and (prod.forcod = :fornecedor)
order by itens.movdoc, prod.prodes
acho que é só isso. se vc não for mostrar o nome do fornecedor não é necessária a seleção do campo nome nem a junção da tabela de fornecedores. nesse caso a instrução seria:
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc)
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
where (mov.movdat between :dataini and :datafim)
    and (prod.forcod = :fornecedor)
order by itens.movdoc, prod.prodes
          itens.iteqde, (itens.iteqde * prod.proprc),
          fornec.fornom
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
left join forncecedor fornec on (fornec.forcod = itens.forcod)
where (mov.movdat between :dataini and :datafim)
    and (prod.forcod = :fornecedor)
order by itens.movdoc, prod.prodes
acho que é só isso. se vc não for mostrar o nome do fornecedor não é necessária a seleção do campo nome nem a junção da tabela de fornecedores. nesse caso a instrução seria:
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc)
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
where (mov.movdat between :dataini and :datafim)
    and (prod.forcod = :fornecedor)
order by itens.movdoc, prod.prodes
Responder
Gostei + 0
06/05/2004
Emerson Nascimento
[size=18:18f1094cbd][b:18f1094cbd]corrigindo[/b:18f1094cbd][/size:18f1094cbd]
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc),
          fornec.fornom
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
left join forncecedor fornec on (fornec.forcod = itens.forcod)
where (mov.movdat between :dataini and :datafim)
    and ([b:18f1094cbd]itens[/b:18f1094cbd].forcod = :fornecedor)
order by itens.movdoc, prod.prodes
acho que é só isso. se vc não for mostrar o nome do fornecedor não é necessária a seleção do campo nome nem a junção da tabela de fornecedores. nesse caso a instrução seria:
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc)
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
where (mov.movdat between :dataini and :datafim)
    and ([b:18f1094cbd]itens[/b:18f1094cbd].forcod = :fornecedor)
order by itens.movdoc, prod.prodes
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc),
          fornec.fornom
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
left join forncecedor fornec on (fornec.forcod = itens.forcod)
where (mov.movdat between :dataini and :datafim)
    and ([b:18f1094cbd]itens[/b:18f1094cbd].forcod = :fornecedor)
order by itens.movdoc, prod.prodes
acho que é só isso. se vc não for mostrar o nome do fornecedor não é necessária a seleção do campo nome nem a junção da tabela de fornecedores. nesse caso a instrução seria:
select mov.movdat, mov.movdoc, prod.prodes,
          itens.iteqde, (itens.iteqde * prod.proprc)
from vendas mov
left join itens on (itens.movdoc = mov.movdoc)
left join produtos prod on (prod.procod = itens.procod)
where (mov.movdat between :dataini and :datafim)
    and ([b:18f1094cbd]itens[/b:18f1094cbd].forcod = :fornecedor)
order by itens.movdoc, prod.prodes
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)