【发布时间】:2021-09-20 18:48:34
【问题描述】:
我在一个表中有超过 800,000 行。这是我所拥有的一个例子。我想要做的是运行一个更新查询来填充 Balance 列。
| 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 开始,而是从前一行余额开始。然后从那里减去需求并添加供应。一旦我们到达下一组零件编号,我将再次从 Current 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 中,手动填充第一个余额字段,然后应用我复制下来的公式。然后我将数据加载回 SQL。
我还尝试了一个 VB 脚本,它一次查看每一行,然后进行计算并填充 Balance。但是对于 80 万条记录,该脚本需要数小时才能运行。
我正在寻找 SQL 解决方案。
谢谢!
【问题讨论】:
-
请注意,在 SQL 表中有 rows 和 columns,而不是记录或字段。
-
您使用的是哪个 dbms?
-
MS SQL Server 2012
-
请提供足够的代码,以便其他人更好地理解或重现问题。
标签: sql sql-server tsql balance