如何使用分组零件号填充 SQL 中的余额字段

How can I populate a balance field in SQL with grouped Part Numbers

我在 table 中有超过 800,000 行。这是我所拥有的一个例子。我想要做的是 运行 填充余额列的更新查询。

Part No Current QOH Supply Demand Balance Previous Part No ID
ABC123 15 0 1 1
ABC123 15 5 3 ABC123 2
ABC123 15 0 5 ABC123 3
DEF321 22 0 16 ABC123 4
DEF321 22 0 3 DEF321 5
DEF321 22 30 5 DEF321 6
DEF321 22 0 1 DEF321 7
DEF321 22 14 4 DEF321 8
DEF321 22 0 9 DEF321 9
DEF321 22 0 4 DEF321 10

Part Nos很多,都是分组的,如图

对于组中的第一个零件号,我想从当前 QOH 开始,减去需求并添加供应。然后对于组中所有剩余的部件号,我不从当前 QOH 开始,而是从前一行余额开始。然后从那里我减去需求并添加供应。一旦我们到达下一组零件号,我再次从当前 QOH 开始。我有使用 Lag 填充的上一个部件号。这有助于确定零件号是否是组中的第一个。

填充余额后,它应该如下所示:

Part No Current QOH Supply Demand Balance Previous Part No ID
ABC123 15 0 1 14 1
ABC123 15 5 3 16 ABC123 2
ABC123 15 0 5 11 ABC123 3
DEF321 22 0 16 6 ABC123 4
DEF321 22 0 3 3 DEF321 5
DEF321 22 30 5 28 DEF321 6
DEF321 22 0 1 27 DEF321 7
DEF321 22 14 4 37 DEF321 8
DEF321 22 0 9 28 DEF321 9
DEF321 22 0 4 24 DEF321 10

目前,我将数据加载到 Excel,手动填充第一个 Balance 字段,然后应用一个公式,我将其复制下来。然后我将数据加载回 SQL.

我还尝试了一个 VB 脚本,该脚本查看每一行,一次一个,并进行计算并填充余额。但是对于 800K 条记录,该脚本需要几个小时才能 运行.

我正在寻找 SQL 解决方案。

谢谢!

您可以使用 window functions 计算您的 运行 余额,如下所示:

select partNo, CurrentQOH, supply, Demand, 
    First_Value(CurrentQOH) over(partition by partno order by id) 
    + Sum(supply-demand) over(partition by partno order by id) Balance,
    PreviousPartNo, Id
from t