AGRUPAR E MOSTAR O ULTIMO
possuo o seguinte código:
resumidamente:
tenho 2 tabelas: PRODUTOS e PRODUTOS_ENTRADA_ITENS
na tabela PRODUTOS possuo todos os produtos da loja
na tabela PRODUTOS_ENTRADA_ITENS possuo todas as entradas nos estoque daqueles produtos cadastrados.
o meu problema na duplicidadade de exibição.
exemplo
PRODUTOS PREÇO FRETE ETC VENDA
SABAO 1,00 0,50 1,50
SABAO 1,10 0,60 1,70
SABAO 1,15 0,60 1,75
ou seja, durante 1 mes fiz 3 compras desse mesmo produto e cadastrei essas compras eu cadastrei na tabela PRODUTOS_ENTRADA_ITENS, sendo que a ultima compra é a que vale para valores (PREÇO, FRETE, ETC, VENDA)...
nao queria que aparece todas as entradas nao e sim agrupar todos os SABAO e mostrasse somente o ultimo PREÇO, FRETE, ETC, VENDA cadastrado daquele produto
entao ficaria assim:
PRODUTOS PREÇO FRETE ETC VENDA
SABAO 1,15 0,60 1,75
como eu faço isso?
[Ô]SELECT (PRODUTOS.DESCRICAO) as var_Desc, (PRODUTOS.CODIGO) as var_CodEnt, (PRODUTOS.QUANT_ESTOQUE) as var_Quant, (PRODUTOS_ENTRADA_ITENS.CUSTO) as var_Custo, (PRODUTOS_ENTRADA_ITENS.FRETE) as var_Frete, (PRODUTOS_ENTRADA_ITENS.IMPOSTO_VALOR_COMPRA) as var_impcompra, (PRODUTOS_ENTRADA_ITENS.CUSTO_COMPRA) as var_vlrcompra, (PRODUTOS_ENTRADA_ITENS.LUCRO_VALOR) as var_lucro, (PRODUTOS_ENTRADA_ITENS.IMPOSTO_VALOR_VENDA) as var_impvenda, (PRODUTOS_ENTRADA_ITENS.VENDA) as var_vlrvenda, PRODUTOS.CODIGO, PRODUTOS_ENTRADA_ITENS.CODIGO_PRODUTO FROM PRODUTOS INNER JOIN PRODUTOS_ENTRADA_ITENS ON PRODUTOS.CODIGO = PRODUTOS_ENTRADA_ITENS.CODIGO_PRODUTO ORDER BY [Ô] & INDICE
resumidamente:
tenho 2 tabelas: PRODUTOS e PRODUTOS_ENTRADA_ITENS
na tabela PRODUTOS possuo todos os produtos da loja
na tabela PRODUTOS_ENTRADA_ITENS possuo todas as entradas nos estoque daqueles produtos cadastrados.
o meu problema na duplicidadade de exibição.
exemplo
PRODUTOS PREÇO FRETE ETC VENDA
SABAO 1,00 0,50 1,50
SABAO 1,10 0,60 1,70
SABAO 1,15 0,60 1,75
ou seja, durante 1 mes fiz 3 compras desse mesmo produto e cadastrei essas compras eu cadastrei na tabela PRODUTOS_ENTRADA_ITENS, sendo que a ultima compra é a que vale para valores (PREÇO, FRETE, ETC, VENDA)...
nao queria que aparece todas as entradas nao e sim agrupar todos os SABAO e mostrasse somente o ultimo PREÇO, FRETE, ETC, VENDA cadastrado daquele produto
entao ficaria assim:
PRODUTOS PREÇO FRETE ETC VENDA
SABAO 1,15 0,60 1,75
como eu faço isso?
só tente esta modificação
SELECT MAX(PRODUTOS.DESCRICAO) as var_Desc, (PRODUTOS.CODIGO) as var_CodEnt, ...
de o erro:
Run-time error 3122
Você tentou executar uma consulta que não inclui a expressão [ô]var_CodEnt[ô] especificada como parte de uma função agregada.
Run-time error 3122
Você tentou executar uma consulta que não inclui a expressão [ô]var_CodEnt[ô] especificada como parte de uma função agregada.
[Ô]SELECT DISTINC (PRODUTOS.DESCRICAO) as var_Desc, (PRODUTOS.CODIGO) as var_CodEnt, (PRODUTOS.QUANT_ESTOQUE) as var_Quant, (PRODUTOS_ENTRADA_ITENS.CUSTO) as var_Custo, (PRODUTOS_ENTRADA_ITENS.FRETE) as var_Frete, (PRODUTOS_ENTRADA_ITENS.IMPOSTO_VALOR_COMPRA) as var_impcompra, (PRODUTOS_ENTRADA_ITENS.CUSTO_COMPRA) as var_vlrcompra, (PRODUTOS_ENTRADA_ITENS.LUCRO_VALOR) as var_lucro, (PRODUTOS_ENTRADA_ITENS.IMPOSTO_VALOR_VENDA) as var_impvenda, (PRODUTOS_ENTRADA_ITENS.VENDA) as var_vlrvenda, PRODUTOS.CODIGO, PRODUTOS_ENTRADA_ITENS.CODIGO_PRODUTO FROM PRODUTOS INNER JOIN PRODUTOS_ENTRADA_ITENS ON PRODUTOS.CODIGO = PRODUTOS_ENTRADA_ITENS.CODIGO_PRODUTO ORDER BY [Ô] & INDICE & [Ô] DESC[Ô]
deu o erro:
Erro: 3085
Função [ô]DISTINC[ô] indefinida na expressão
Erro: 3085
Função [ô]DISTINC[ô] indefinida na expressão
eu tentei assim:
mas sempre dar o erro:
Você tentou executar uma consulta que não inclui a expressão [ô]VAR_COD[ô] especificada como parte de uma função agregada.
se to chamando somente 1 tabela agora e fazendo um agrupamento simples pq tah dando esse negocio de [Ô]função agregada[Ô] ?
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT (PRODUTOS_ENTRADA_ITENS.CODIGO) AS VAR_COD, (PRODUTOS_ENTRADA_ITENS.DESCRICAO) AS VAR_DESC, (PRODUTOS_ENTRADA_ITENS.CODIGO_PRODUTO) AS VAR_CODPRO, (PRODUTOS_ENTRADA_ITENS.VENDA) AS VAR_VENDA FROM PRODUTOS_ENTRADA_ITENS GROUP BY VAR_DESC[Ô]
Set Rs = BD.OpenRecordset(SQL)
mas sempre dar o erro:
Você tentou executar uma consulta que não inclui a expressão [ô]VAR_COD[ô] especificada como parte de uma função agregada.
se to chamando somente 1 tabela agora e fazendo um agrupamento simples pq tah dando esse negocio de [Ô]função agregada[Ô] ?
Cara,
Acredito que você esteja procurando algo como o código abaixo.
Só para lembrar, introduzi um campo que eu não sei o nome que vc está usando, que é [Ô]Data_Entrada[Ô], que é a data do movimento e, no BETWEEN, coloquei [Ô]xxxDataInicialxxx[Ô] e [Ô]xxxDataFinalxxx[Ô] para você substituir pelos seus valores. Não esquece que se for ACCESS, a data é mm/dd/aaaa e se for SQLServer deve ser aaaa/mm/dd, sempre entre aspas simples (SQLServer) ou # (ACCESS).
Teste e me avisa se funcionou
Acredito que você esteja procurando algo como o código abaixo.
Só para lembrar, introduzi um campo que eu não sei o nome que vc está usando, que é [Ô]Data_Entrada[Ô], que é a data do movimento e, no BETWEEN, coloquei [Ô]xxxDataInicialxxx[Ô] e [Ô]xxxDataFinalxxx[Ô] para você substituir pelos seus valores. Não esquece que se for ACCESS, a data é mm/dd/aaaa e se for SQLServer deve ser aaaa/mm/dd, sempre entre aspas simples (SQLServer) ou # (ACCESS).
Teste e me avisa se funcionou
SELECT prd.Descricao AS var_Desc,
prd.Codigo AS var_codEnt,
prd.Quant_Estoque AS var_Quant,
peiult.Custo AS var_Custo,
peiult.Frete AS var_Frete,
peiult.Imposto_Valor_Compra AS var_ImpCompra,
peiult.Custo_Compra AS var_VlrCompra
FROM Produtos prd
INNER JOIN Produtos_Entrada_Itens peiult
ON peiult.Codigo_Produto = prd.Codigo
WHERE peiult.Data_Entrada = (SELECT MAX(peim.Data_Entrada)
FROM Produtos_Entrada_Itens pei
WHERE pei.Data_Entrada BETWEEN xxxDataInicialxxx AND xxxDataFinalxxx
AND pei.Codigo_Produto = prd.Codigo)
realmente possui o campo DATA_ENTRADA... e tb bd ACCESS... ai fiz assim:
obs: acrescentei [Ô]AS[Ô] antes de [Ô]prd, peiult e pei[Ô] na parte do FROM
sem colocar os [Ô]AS[Ô] e tb colocando deu o mesmo erro:
Erro 3061
Parametros insuficientes. Eram esperados 1
quando debugo ele seleciona:
Set Rs = BD.OpenRecordset(SQL)
Call ABRIR_BD_SEM_DATA1
SQL = [Ô]SELECT prd.Descricao AS var_Desc, prd.Codigo AS var_codEnt, prd.Quant_Estoque AS var_Quant, peiult.Custo AS var_Custo, peiult.Frete AS var_Frete, peiult.Imposto_Valor_Compra AS var_ImpCompra, peiult.Custo_Compra AS var_VlrCompra FROM Produtos AS prd INNER JOIN Produtos_Entrada_Itens AS peiult ON peiult.Codigo_Produto = prd.Codigo WHERE peiult.DATA_ENTRADA = (SELECT MAX(peim.DATA_ENTRADA) FROM Produtos_Entrada_Itens AS pei WHERE pei.Data_Entrada between #[Ô] & Format(Mask1, [Ô]mm/dd/yy[Ô]) & [Ô]# and #[Ô] & Format(Mask2, [Ô]mm/dd/yy[Ô]) & [Ô]# AND pei.Codigo_Produto = prd.Codigo)[Ô]
Set Rs = BD.OpenRecordset(SQL)
obs: acrescentei [Ô]AS[Ô] antes de [Ô]prd, peiult e pei[Ô] na parte do FROM
sem colocar os [Ô]AS[Ô] e tb colocando deu o mesmo erro:
Erro 3061
Parametros insuficientes. Eram esperados 1
quando debugo ele seleciona:
Set Rs = BD.OpenRecordset(SQL)
só troca o pedaço
por
Deve resolver
Eu escrevi errado o nome da tabela nesse sub-select.
Simulei a situação aqui em access e funcionou.
Se funcionar, não esquece de fechar o tópico e me pontuar. Se não funcionar, me avida que eu te ajudo
MAX(peim.DATA_ENTRADA)
por
MAX(pei.DATA_ENTRADA)
Deve resolver
Eu escrevi errado o nome da tabela nesse sub-select.
Simulei a situação aqui em access e funcionou.
Se funcionar, não esquece de fechar o tópico e me pontuar. Se não funcionar, me avida que eu te ajudo
funcionou quase perfeito
ele mostrou todos os podutos sendo os ultimo adicionados na tabela Produtos_Entrada_Itens
o problema é q no final ele repetiu o primeiro produto com a data da penultima cadastro.
ou seja
produto data_entrada
Arroz 14/11
Feijâo 14/11
Açucar 14/11
Arroz 10/11
ele mostrou todos os podutos sendo os ultimo adicionados na tabela Produtos_Entrada_Itens
o problema é q no final ele repetiu o primeiro produto com a data da penultima cadastro.
ou seja
produto data_entrada
Arroz 14/11
Feijâo 14/11
Açucar 14/11
Arroz 10/11
Vc mudou a instrução SQL além do MAX que te disse para mudar?
Se quizer que ele imprima a última data de compra, o SQL tem que ser assim
Porém, pode também acontecer de ARROZ estar com essa descrição e com 2 Cod_Produto diferentes.
Se quizer que ele imprima a última data de compra, o SQL tem que ser assim
SELECT prd.Descricao AS var_Desc,
prd.Codigo AS var_codEnt,
peiult.Data_Entrada AS var_DtUltEntrada,
prd.Quant_Estoque AS var_Quant,
peiult.Custo AS var_Custo,
peiult.Frete AS var_Frete,
peiult.Imposto_Valor_Compra AS var_ImpCompra,
peiult.Custo_Compra AS var_VlrCompra
FROM Produtos prd
INNER JOIN Produtos_Entrada_Itens peiult
ON peiult.Codigo_Produto = prd.Codigo
WHERE peiult.Data_Entrada = (SELECT MAX(pei.Data_Entrada)
FROM Produtos_Entrada_Itens pei
WHERE pei.Data_Entrada BETWEEN xxxDataInicialxxx AND xxxDataFinalxxx
AND pei.Codigo_Produto = prd.Codigo)
Porém, pode também acontecer de ARROZ estar com essa descrição e com 2 Cod_Produto diferentes.
Tópico encerrado , respostas não são mais permitidas