下面是一篇有趣的文章,我发现这篇文章在我的项目中很有用:
基于集合的速度同步: FIFO库存SQL问题
库存表,我们用来跟踪库存进出我们想象的库存仓库的跟踪运动。我们的仓库最初是空的,然后由于库存购买(tranCode = 'IN'),或者由于随后的返回(tranCode = 'RET')而进入仓库,而库存在出售时会从仓库中移出(tranCode = ' out ')。每种类型的股票模型都由一个ArticleID标识。由于给定项的购买、销售或返回,库存进出仓库的每一次移动都会导致将一行添加到“库存”表中,由“StockID标识”列中的值唯一标识,并描述添加或删除了多少项、购买价格、交易日期等。
虽然我在我正在进行的项目中使用了这个,但我仍然坚持着如何使每一笔交易的价格对费用“退出”。我需要这个价值来决定我要向我的顾客收取多少钱。
Here's my current table
Item transaction code qty price
apple IN 5 10.00
apple IN 3 20.00
apple OUT 6
Manual computation for the OUT transaction price (FIFO)
QTY price total price
5 10.00 50.00
1 20.00 20.00
TOTAL:6 70.00
Output of the script:
Item CurrentItems CurrentValue
apple 2 40.00
What I need:
Item transaction code qty price CurrentItems CurrentValue
apple IN 5 10.00 5 50.00
apple IN 3 20.00 8 110.00
apple OUT 6 2 40.00
This too will be OK
Item transaction code qty price CurrentItems
apple IN 5 10.00 0
apple IN 3 20.00 0
apple OUT 6 70 赢得比赛的脚本非常有用,我希望有人能帮助我获得每笔交易的价格。
发布于 2013-02-19 20:28:15
我建议按以下方式设计您的表:向表中添加一个新字段,即qty_out
出售前的桌子:
Item transaction code qty qty_out price
apple IN 5 0 10.00
apple IN 3 0 20.00
apple OUT 6 null出售这6件物品后的桌子:
Item transaction code qty qty_out price
apple IN 5 5 10.00
apple IN 3 1 20.00
apple OUT 6 null您可以将"qty“与"qty_out”(用于IN事务)进行比较,以找出价格。
发布于 2012-12-04 05:22:16
在本文的基础上,脚本得到的结果是库存的价值。您需要对此进行修改,这样就不需要计算所有的库存,而是只使用第一个N项。
我建议用CASE语句来设置每个“IN”中的项目数,因为您知道库存项目和要取出的数量,因此可以对照运行的总数进行检查。
发布于 2014-08-26 08:43:13
您无法跟踪每个事务本身,但是您可以使用最后一行(除了要计算的事务外)来计算它,它是当前值列,减去要计算的当前值。
在这个例子中
StockID ArticleID TranDate TranCode Items Price CurrentItems CurrentValue
4567 10000 10:45:07 IN 738 245.94 738 181,503.72
21628 10000 12:05:25 OUT 600 138 33,939.72
22571 10000 14:39:27 IN 62 199.95 200 46,336.62
30263 10000 16:14:13 OUT 165 35 6,998.25
42090 10000 18:18:58 RET 5 40 7,998.00
53143 10000 20:18:54 IN 500 135.91 540 75,953.00交易30263的价格为46,336.62 - 6,998.25 = 39,338.37
https://stackoverflow.com/questions/11204136
复制相似问题