Eu criei uma consulta para buscar:
O que tenho em estoque + o último preço de compra.
A consulta é para obter a valoração do meu estoque.
Mas quando utilizo a função MAX(), ela procura algum valor que não consegui descobrir. E se eu não usar MAX() em determinadas colunas, a consulta simplesmente duplicará os valores.
Pesquisei algumas documentações mas sem exito.
Pode ser algo simples, mas não consegui encontrar o erro. Refiz essa query algumas vezes e quando fica mais complexa é quando começa a duplicar.
Sua ajuda é gentilmente(MUITO) apreciada.
A consulta que fiz:
SELECT T0.ItemCode, T0.ItemName, T2.WhsCode, T2.OnHand, x.preco,
x.moeda,
CASE WHEN x.Taxa = 0 THEN 1
WHEN x.Taxa IS NULL THEN 1
ELSE x.Taxa
END [Taxa],
CASE WHEN X.doc = 31882 or X.doc = 31881 THEN '20221216' ELSE X.UltData END UltData , x.processo,
CASE WHEN T3.U_Nac = 0 THEN 0.56
WHEN T3.U_Nac IS NULL THEN 0.56
ELSE T3.U_Nac
END [Nacionalização %],
CASE WHEN X.moeda <> 'R$' AND T3.U_Nac = 0 AND T0.ItemCode NOT LIKE 'N%' THEN (T2.OnHand * x.preco * x.Taxa )*(1 + 0.56)
WHEN X.moeda <> 'R$' AND T3.U_Nac IS NULL AND T0.ItemCode NOT LIKE 'N%' THEN (T2.OnHand * x.preco * x.Taxa )*(1 + 0.56)
--WHEN X.moeda <> 'R$' AND T3.U_Nac IS NULL AND T0.ItemCode NOT LIKE 'N%' THEN (T2.OnHand * x.preco * x.Taxa )*(1 + 0.56)
WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac = 0 THEN (T2.OnHand * x.preco)*(1 + 0.56)
WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac IS NULL THEN (T2.OnHand * x.preco)*(1 + 0.56)
WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac IS NULL AND x.Taxa = 0 THEN (T2.OnHand * x.preco)*(1 + 0.56)
WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac = 0 AND x.Taxa = 0 THEN (T2.OnHand * x.preco)*(1 + 0.56)
WHEN X.moeda = 'R$' AND T0.ItemCode NOT LIKE 'N%' AND T3.U_Nac > 0 AND x.Taxa = 0 THEN (T2.OnHand * x.preco)*(1 + T3.U_Nac)
WHEN X.moeda = 'R$' AND T0.ItemCode LIKE 'N%' AND T3.U_Nac = 0 THEN (T2.OnHand * x.preco)
WHEN X.moeda = 'R$' AND T0.ItemCode LIKE 'N%' AND T3.U_Nac IS NULL THEN (T2.OnHand * x.preco)
WHEN T0.ItemCode LIKE 'N%' THEN (T2.OnHand * x.preco)
ELSE (T2.OnHand * x.preco * x.Taxa )*(1 + T3.U_Nac) END as [valoração]
FROM OITM T0
LEFT JOIN (
SELECT MAX(T1.DocEntry) as doc, T1.ItemCode, MAX(T1.Price) as preco, MAX(T1.Currency) as moeda, MAX(T1.Rate) as Taxa,
MAX(T1.U_Processo) as processo, MAX(T1.DocDate) as UltData
FROM POR1 T1
GROUP BY T1.ItemCode
) X ON T0.ItemCode = X.ItemCode
LEFT JOIN (SELECT U_Nac, DocEntry, DocCur FROM OPOR where CANCELED = 'N')T3 ON X.doc = T3.DocEntry
JOIN OITW T2 ON T0.ItemCode = T2.ItemCode
WHERE T2.OnHand > 0 and T2.WhsCode not in ('11','08')
AND T0.ItemCode NOT IN ('ICATALOGO-001','ISAMPLES-001','ICRATE-001','ICRATEBELLSIDE-001','ISAMPLEBOX-001','ITRANSPORT-001','IFLATCHARGE-001')
order by T0.ItemCode