AGRUPAR E MOSTAR O ULTIMO

WEBIER 25/11/2009 21:40:00
#328579
possuo o seguinte código:

[Ô]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?
MARCELO.TREZE 25/11/2009 22:34:56
#328581
só tente esta modificação

SELECT MAX(PRODUTOS.DESCRICAO) as var_Desc, (PRODUTOS.CODIGO) as var_CodEnt, ...
WEBIER 25/11/2009 23:16:44
#328583
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.
EDERMIR 26/11/2009 00:02:24
#328585
[Ô]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[Ô]

WEBIER 26/11/2009 10:31:32
#328599
deu o erro:

Erro: 3085
Função [ô]DISTINC[ô] indefinida na expressão
WEBIER 26/11/2009 11:20:26
#328602
eu tentei assim:

    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[Ô] ?
RCMRO 26/11/2009 14:34:56
#328617
Resposta escolhida
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

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)
WEBIER 26/11/2009 16:54:58
#328627
realmente possui o campo DATA_ENTRADA... e tb bd ACCESS... ai fiz assim:

    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)
RCMRO 26/11/2009 16:59:27
#328628
só troca o pedaço
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
WEBIER 26/11/2009 18:04:33
#328634
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
RCMRO 27/11/2009 07:52:16
#328652
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

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.
Página 1 de 4 [31 registro(s)]
Tópico encerrado , respostas não são mais permitidas