使用TSQL对当前表进行双层循环的增量叠加更新

问题说明

在某工厂的生产过程中,有个螺栓拧紧的操作,针对不同的工序分不同的步数。如,第1步1个,第二步3个,第三步5个。这样在记录的时候,就会记录出以下表(名为PBT),所有字段均为int型,结构和数据如下所示:

PBT_IDPBT_ProductIDPBT_OPStationIDPBT_BoltIDPBT_StepIDPBT_BoltCount
412111
512321
612431
713511
813722
9141014
101511119
111611111
12171617
13181812
14192912
1511034110
1611135110
171134121
181134232
2611311212
1911443120
2011544111
211164616
221174711
231174825
241174934
251175041
2711811411
2811911913
2911912022
3011912131
3112012838
3212012911
3312013021
3412113211
3512113322
3612113431
23512213611
23612313813
23712314321
238124145122

由于现在要对拧紧的螺栓加上起始编号,如前面三步工序的螺栓中, 第1步的起始编号是0,第2步的起始编号是为第1步的总数,即1,第3步的起始编号是第1步+第2步的总数,即4,以此类推。在上表中,即判断相关PBT_OPStationID的记录,在不同的PBT_StepID下的 BoltCount的顺序。比如,当PBT_OPStationID为2时,有以下三条数据

PBT_IDPBT_ProductIDPBT_OPStationIDPBT_BoltIDPBT_StepIDPBT_BoltCount
412111
512321
612431

对应的PBT_StepID分别为1,2,3。

  • 当PBT_StepID为1时,起始编号为0
  • 当PBT_StepID为2时,其编号为BoltCount[PBT_StepID=1时] = 1
  • 当PBT_StepID为3时,其编号为 BoltCount[PBT_StepID=1时] + BoltCount[PBT_StepID=2时] = 1 + 1 = 2

由于每次都要计算,比较麻烦同时也降低服务器运行效率,所以现在希望追加一个字体直接保存起始编号信息。

解决

为了起始编号,我们追加了一个PBT_BoltTotalCount字段。在计算时,我们只需要计算当相同PBT_OPStationID下,对于当前PBT_StepID,所有小于它的记录的BoltCount求和。解决的SQL语句如下:

DECLARE @OPID INT, @STEPID INT
SET @OPID = 1
SET @STEPID = 1
WHILE @OPID <= 24
BEGIN
  SET @STEPID = 1
	WHILE @STEPID <= 4
		BEGIN
		Update [cvinet_test].[dbo].[ProductBoltTightening]
		Set PBT_BoltTotalCount = isnull((select sum(PBT_BoltCount) from ProductBoltTightening WHERE PBT_OPStationID = @OPID AND ProductBoltTightening.PBT_StepID < @STEPID), 0)
		Where PBT_OPStationID = @OPID AND PBT_StepID = @STEPID
		SET @STEPID = @STEPID + 1
	END
	SET @OPID = @OPID+1
END

在以上的SQL中,使用了双层循环,分别对不同的PBT_OPStationID和PBT_StepID进行计算。

结果

执行后,结果如下所示:

PBT_IDPBT_ProductIDPBT_OPStationIDPBT_BoltIDPBT_StepIDPBT_BoltCountPBT_BoltTotalCount
4121110
5123211
6124312
7135110
8137221
91410140
1015111190
1116111110
121716170
131818120
141929120
15110341100
16111351100
1711341212
1811342323
26113112120
19114431200
20115441110
2111646160
2211747110
2311748251
2411749346
25117504110
27118114110
28119119130
29119120223
30119121315
31120128382
32120129110
33120130211
34121132110
35121133221
36121134313
235122136110
236123138130
237123143213
2381241451220
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值