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

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

Faustoalves

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


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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar