SQL适用于Microsoft SQL Server 2014。
计算表前的原始查询结果如下。它按Item和OrderDate排序。 InventoryQty是当前可用数量。每个项目的记录都是一样的。将基于一阶优先服务规则来按顺序完成订单。需要计算在完成该记录后可用数量的BalanceQty。
原始查询记录:
Item OrderDate OrderQty InventoryQty
Item1 2016/11/01 3 10
Item1 2016/11/03 4 10
Item1 2016/11/09 2 10
Item1 2016/11/10 1 10
Item1 2016/11/11 5 10
Item1 2016/11/15 6 10
Item1 2016/11/20 3 10
Item2 2016/11/11 7 15
Item2 2016/11/13 4 15
Item2 2016/11/19 5 15
Item2 2016/11/20 6 15
使用BalanceQty的预期查询结果。
Item OrderDate OrderQty InventoryQty BalanceQty
Item1 2016/11/01 3 10 7
Item1 2016/11/03 4 10 3
Item1 2016/11/09 2 10 1
Item1 2016/11/10 1 10 0
Item1 2016/11/11 5 10 -5
Item1 2016/11/15 6 10 -11
Item1 2016/11/20 3 10 -14
Item2 2016/11/11 7 15 8
Item2 2016/11/13 4 15 4
Item2 2016/11/19 5 15 -1
Item2 2016/11/20 6 15 -7
答案 0 :(得分:4)
您正在寻找累计金额。在SQL Server 2012+中,您可以这样做:
select t.*,
(InventoryQty - sum(OrderQty) over (partition by item order by OrderDate)) as BalanceQty
from t;
SQL Server 2013会 - 如果它存在 - 可能是在2012年之后出现并具有此功能;)我认为这是一个错字。