根据之前的记录计算新字段

Yel*_*rry 1 sql sql-server

SQL 适用于 Microsoft SQL Server 2014。

计算前原始查询结果表如下。它按 Item 和 OrderDate 排序。库存数量是当前可用数量。每个项目的记录都是相同的。将按照先序先服务的规则依次完成订单。需要计算 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      
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

您正在寻找累计金额。在 SQL Server 2012+ 中,您将执行以下操作:

select t.*,
       (InventoryQty - sum(OrderQty) over (partition by item order by OrderDate)) as BalanceQty
from t;
Run Code Online (Sandbox Code Playgroud)

SQL Server 2013(如果存在的话)大概会在 2012 年之后出现并具有此功能;)我认为这是一个拼写错误。