Fórum Melhor select para um problema. #260632

30/11/2004

0

Estou desenvolvendo uma aplicação e meu cliente pediu para mim fazer um relatório que totalize a qtde de produtos vendidos num determinado período.

Os produtos vendido ficam em minha tabela bdItensPedido e Meu cadastro de produtos fica na tabela bdProdutos.

Qual a melhor forma de fazer uma select para isso?


Balceiro

Balceiro

Responder

Posts

30/11/2004

Emerson Nascimento

select IPED.CodigoDoProduto, max(PROD.Descricao),
    AVG(IPED.ValorUnitario) VlrUnitMedio,
    Sum(IPED.Quantidade) Qtd_Total
from bdPedido PED
inner join bdItensPedido IPED on (IPED.IdentificadorDoPedido=PED.IdentificadorDoPedido)
inner join bdProdutos PR on (PR.IdentificadorDoProduto=IPED.IdentificadorDoProduto)
where PED.DataVenda between :datainicial and :datafinal
group by IPED.CodigoDoProduto


Responder

Gostei + 0

30/11/2004

Balceiro

Não tá dando certo, dá um erro de operador faltando na expressão.


Responder

Gostei + 0

30/11/2004

Balceiro

o windows mostra essa linha

inner join bdItensPedido IPED on (IPED.IdentificadorDoPedido=PED.IdentificadorDoPedido) 
inner join bdProdutos PR on (PR.IdentificadorDoProduto=IPED.IdentificadorDoProduto) 


e diz manda a mensagem: Operador faltando


Responder

Gostei + 0

30/11/2004

Emerson Nascimento

publique a estrutura das tabelas envolvidas...


Responder

Gostei + 0

30/11/2004

Bruno Belchior

olha ai:
select IPED.CodigoDoProduto, max(PROD.Descricao), 
    AVG(IPED.ValorUnitario) VlrUnitMedio, 
    Sum(IPED.Quantidade) Qtd_Total 
from bdPedido PED, bdProdutos IPED 
inner join bdItensPedido IPED on (IPED.IdentificadorDoPedido=PED.IdentificadorDoPedido) 
inner join bdProdutos PR on (PR.IdentificadorDoProduto=IPED.IdentificadorDoProduto) 
where PED.DataVenda between :datainicial and :datafinal 
group by IPED.CodigoDoProduto



Responder

Gostei + 0

01/12/2004

Emerson Nascimento

corrigindo....

select IPED.CodigoDoProduto, max(PROD.Descricao),
    AVG(IPED.ValorUnitario) VlrUnitMedio,
    Sum(IPED.Quantidade) Qtd_Total
from bdPedido PED
inner join bdItensPedido IPED on (IPED.IdentificadorDoPedido=PED.IdentificadorDoPedido)
inner join bdProdutos PROD on (PROD.IdentificadorDoProduto=IPED.IdentificadorDoProduto)
where PED.DataVenda between :datainicial and :datafinal
group by IPED.CodigoDoProduto

o erro estava no alias PR, que na verdade deveria ser PROD, pois os campos se referenciavam a PROD. agora deve dar certo, desde que você informe seus campos de relacionamento corretamente. para poder ajudar de uma forma mais eficaz, seria necessário você publicar a estrutura das suas tabelas bdItensPedido, bdProdutos e da tabela de pedidos.


Responder

Gostei + 0

01/12/2004

Balceiro

emerson, alterei pro jeito que vc colocou e continua o mesmo erro:


erro de sintaxe (operador faltando) na expressão de consulta 
´(IPED.Cod_Pedido=PED.Cod) inner join bdProdutos PROD on (PROD.Cod_Barras=IPED.Cod_Produto)´



Responder

Gostei + 0

01/12/2004

Balceiro

esta é a minha estrutura:

  
     Close;
     Sql.Clear;
     a:= ´select bdItens_Pedido.Cod_Produto, max (bdProduto.Descricao_Produto), AVG(bdItens_Pedido.Valor_Unt) as VlrUnitMedio, Sum(bdItens_Pedido.Qtde) as Qtd_Total ´;

     b := ´FROM bdPedido PED inner join bdItensPedido IPED on (IPED.Cod_Pedido=PED.Cod) inner join bdProdutos PROD on (PROD.Cod_Barras=IPED.Cod_Produto) where PED.Emissao between :datainicial and :datafinal group by IPED.Cod_Produto´;

     Sql.Add(a+b);

     Parameters[0].Value := rxDataIni.Text;
     Parameters[1].Value := rxDataFim.Text;
     Open;



Responder

Gostei + 0

01/12/2004

Emerson Nascimento

deveria ser assim:

Close;
Sql.Clear;
a := ´select IPED.Cod_Produto, max (PROD.Descricao_Produto), ´+
        ´AVG(IPED.Valor_Unt) as VlrUnitMedio, Sum(IPED.Qtde) as Qtd_Total ´;

b := ´FROM bdPedido PED ´+
        ´inner join bdItensPedido IPED on (IPED.Cod_Pedido=PED.Cod) ´+
        ´inner join bdProdutos PROD on (PROD.Cod_Barras=IPED.Cod_Produto) ´+
        ´where PED.Emissao between :datainicial and :datafinal ´+
        ´group by IPED.Cod_Produto´;

Sql.Add(a+b);

Parameters[0].Value := rxDataIni.Text;
Parameters[1].Value := rxDataFim.Text;
Open;

note que onde esta IPED, PROD e PED [b:c5aea7d08a]DEVERÁ SER MANTIDO ASSIM[/b:c5aea7d08a], pois são os aliases (apelidos) das tabelas. as demais alterações são apenas estéticas.

dúvidas:
qual banco de dados você está utilizando :?:
o relacionamento das tabelas bdProdutos e bdItensPedido é realmente pelo campo Cod_Barras :?:

mais uma coisa: eu havia solicitado a estrutura das tabelas, não a instrução SQL. mas com a instrução dessa forma já deu pra entender como devem ser feitos os relacionamentos. :wink:


Responder

Gostei + 0

01/12/2004

Balceiro

Utilizo bando Access.


Responder

Gostei + 0

01/12/2004

Balceiro

também não funcionou.


Responder

Gostei + 0

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

Aceitar