根据以前的记录来计算新字段

时间:2016-12-12 01:07:16

标签: sql sql-server

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

1 个答案:

答案 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年之后出现并具有此功能;)我认为这是一个错字。