Fórum Melhor select para um problema. #260632
30/11/2004
0
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
Curtir tópico
+ 0Posts
30/11/2004
Emerson Nascimento
    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
Gostei + 0
30/11/2004
Balceiro
Gostei + 0
30/11/2004
Balceiro
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
Gostei + 0
30/11/2004
Emerson Nascimento
Gostei + 0
30/11/2004
Bruno Belchior
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
Gostei + 0
01/12/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 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.
Gostei + 0
01/12/2004
Balceiro
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)´
Gostei + 0
01/12/2004
Balceiro
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;
Gostei + 0
01/12/2004
Emerson Nascimento
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:
Gostei + 0
01/12/2004
Balceiro
Gostei + 0
01/12/2004
Balceiro
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)