SQL - PEGAR ID MAIOR
segue a SQL
SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) AS Avista, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) AS [A Prazo], Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100), IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100)
ORDER BY Produtos.Nome;
Só que está aparecendo dois registros com o mesmo Produtos.Codigo.
Citação:select * from
( SELECT Produtos.Codigo,
Produtos.Nome AS [Nome do Produto],
Produtos_Marca.Nome AS Marca, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) AS Avista, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) AS [A Prazo],
Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100), IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) )
where Codigo = MaxDeCodigo
ORDER BY Produtos.Nome;
Retornou o Mesmo Resultado
LIONHEART
Não veio nenhum registro
Citação:SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) AS Avista, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100) AS [A Prazo], Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome, IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100), IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100)
Having Produtos_EntradaDET.Codigo = Max(Produtos_EntradaDET.Codigo)
ORDER BY Produtos.Nome;
Cara, eu não lembro se o Having vem Antes ou depois do Group By, mas agora acho que resolve.
vc pode colocar um max nos dois campos e tirar ele do group by mas o problema é que ele pode pegar o valor a vista de uma linha e o valor a prazo de outro.
ex:
codigo avista aprazo
1 100 200
1 200 100
se vc der um max nos dois ele vai volta
1 200 200
faz um teste com esse select.
SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca, max(IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLAvista)/100) ) AS Avista, max(IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)+((IIf(IsNull(Produtos_EntradaDET.ValorUnit),0,Produtos_EntradaDET.ValorUnit)*Produtos.MLPrazo)/100)) AS [A Prazo], Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome
ORDER BY Produtos.Nome;
mas o problema é que não é para pegar o maior valor unitario.
Eu queria pegar o valor da Ultimo Entrada pelo campo Produtos_Entrada.Codigo (AutoNumeração)
Dá pra fazer uma gambia, só que perde o tempo de carregamento vai aumentar de 02 segundos pra 02 minutos
não deu certo, a função agregada só vai trazer os registros encontrados na tabela produtos_det.codigo
vc tem algum campo data hora?
e se vc usar duas subconsultas? uma para o valor a prazo e outra para o valor a vista.
nessa subconsulta da um limit 1 e ordena pela data ou hora
eu viajei nessa sua soma.
pq vc da um isnull somando 2 x a mesma coluna da mesma tabela?
ve se vc consegue entender minha ideia:
faz uma subconsulta caculando o valor a vista só do código que vc quer e manda ordernar de forma decrescente o campo codigo.
só q ai vc da um top 1 ou um limit 1 para voltar só o maior.
deu pra entender?
acho que viajei agora... [S83]
acho que vai ficar um pouco lenta e um pouco feia a consulta tbm.
tenta assim:
SELECT Produtos.Codigo, Produtos.Nome AS [Nome do Produto], Produtos_Marca.Nome AS Marca,
(select top 1
IIf(IsNull(ValorUnit),0,ValorUnit)+((IIf(IsNull(ValorUnit),0,ValorUnit)* Produtos.MLAvista)/100)
from Produtos_EntradaDET where codigo = Produtos_EntradaDET.codigo order by codigo desc) as avista,
(select top 1
IIf(IsNull(ValorUnit),0,ValorUnit)+((IIf(IsNull(ValorUnit),0,ValorUnit)* Produtos.MLPrazo)/100)
from Produtos_EntradaDET where codigo = Produtos_EntradaDET.codigo order by codigo desc) AS APrazo,
Max(Produtos_EntradaDET.Codigo) AS MaxDeCodigo
FROM Produtos_EntradaDET RIGHT JOIN (Produtos LEFT JOIN Produtos_Marca ON Produtos.CodigoMarca = Produtos_Marca.Codigo) ON Produtos_EntradaDET.CodigoProduto = Produtos.Codigo
GROUP BY Produtos.Codigo, Produtos.Nome, Produtos_Marca.Nome
ORDER BY Produtos.Nome;