>>PART # QTY PRICE PK VAL >>001 2 $4 1 >>001 1 $2 2 >>001 4 $1 3 >>>>
>>PART # QTY USED PRICE
>>-------- ------------- -------
>>
>>The procedure (in VFP and in SQL Stored Procedure) will receive a Quantity Used (e.g. 5)>>PART # QTY USED PRICE >>-------- ------------- ------- >>001 2 $4 >>001 1 $2 >>001 3 $1 >>>>
>>PART # QTY PRICE PK VAL >>001 0 $4 1 >>001 0 $2 2 >>001 1 $1 3 >>>>
SELECT ArticleID, TotalStock, SUM(CASE WHEN totalstock > Items+previous THEN (Items+Previous) * price WHEN TotalStock - Previous >0 THEN (TotalStock - Previous) * Price ELSE 0 END) as value FROM (SELECT S1.ArticleID, S1.StockID, S1.Items, S1.Price, ISNULL(SUM(S2.Items),0) As previous, (SELECT SUM(CASE WHEN trancode IN ('IN','RET') THEN items ELSE -Items END ) FROM fifo2 WHERE articleID = S1.ArticleID) as totalstock FROM fifo2 S1 LEFT JOIN fifo2 S2 ON S1.ArticleID = S2.ArticleID AND S1.Stockid < S2.Stockid AND S2.TranCode = 'IN' WHERE S1.TranCode = 'IN' GROUP BY S1.ArticleID, S1.StockID, S1.items, S1.Price ) as X GROUP BY ArticleID, totalStock ORDER BY ArticleIDThe trick is that you first calculate the current stock. Using that, you traverse back the purchaches from most recent to old. And substract the purchases from the stock until it is zero and calculate the values in the same process.