使用TSQL對當前表進行雙層迴圈的增量疊加更新

2021-09-25 04:30:34 字數 3304 閱讀 1591

在某工廠的生產過程中,有個螺栓擰緊的操作,針對不同的工序分不同的步數。如,第1步1個,第二步3個,第三步5個。這樣在記錄的時候,就會記錄出以下表(名為pbt),所有欄位均為int型,結構和資料如下所示:

pbt_id

pbt_productid

pbt_opstationid

pbt_boltid

pbt_stepid

pbt_boltcount41

2111

5123

2161

2431

7135

1181

3722

91410

14101

511119

111611

111121

71617

131818

12141

92912

1511034110

1611135110

171134121

181134232

2611311212

1911443120

2011544111

211164616

221174711

231174825

241174934

251175041

2711811411

2811911913

2911912022

3011912131

3112012838

3212012911

3312013021

3412113211

3512113322

3612113431

2351

2213611

2361

2313813

2371

2314321

2381

24145122

由於現在要對擰緊的螺栓加上起始編號,如前面三步工序的螺栓中, 第1步的起始編號是0,第2步的起始編號是為第1步的總數,即1,第3步的起始編號是第1步+第2步的總數,即4,以此類推。在上表中,即判斷相關pbt_opstationid的記錄,在不同的pbt_stepid下的 boltcount的順序。比如,當pbt_opstationid為2時,有以下三條資料

pbt_id

pbt_productid

pbt_opstationid

pbt_boltid

pbt_stepid

pbt_boltcount41

2111

5123

2161

2431

對應的pbt_stepid分別為1,2,3。

由於每次都要計算,比較麻煩同時也降低伺服器執行效率,所以現在希望追加乙個字型直接儲存起始編號資訊。

為了起始編號,我們追加了乙個pbt_bolttotalcount欄位。在計算時,我們只需要計算當相同pbt_opstationid下,對於當前pbt_stepid,所有小於它的記錄的boltcount求和。解決的sql語句如下:

declare

@opid

int,

@stepid

intset

@opid=1

set@stepid=1

while

@opid

<=

24begin

set@stepid=1

while

@stepid

<=

4begin

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

endset

@opid

=@opid+1

end

在以上的sql中,使用了雙層迴圈,分別對不同的pbt_opstationid和pbt_stepid進行計算。

執行後,結果如下所示:

pbt_id

pbt_productid

pbt_opstationid

pbt_boltid

pbt_stepid

pbt_boltcount

pbt_bolttotalcount41

2111

0512

3211

6124

3127

1351

1081

3722

1914

10140

101511

119011

16111

110121

71617

01318

18120

141929

12015

110341

100161

1135110

017113

41212

181134232

326113

112120

1911443120

020115

441110

211164616

022117

47110

231174825

124117

49346

251175041

1027118

114110

2811911913

029119

120223

3011912131

531120

128382

3212012911

033120

130211

3412113211

035121

133221

3612113431

3235122

136110

2361

2313813

0237123

143213

2381

24145122

0

使用API對登錄檔進行讀寫

首先明確一下hkey的概念。從字面上看它是乙個key的控制代碼。讀寫位置的確定就靠它了。開啟登錄檔編輯器 regedit 裡面的hkey current user還有hkey local machine這些是不是hkey控制代碼呢?必然是啊,都hkey打頭了.明確這個之後,一些問題就好解決了。所有的...

使用基準值對鍊錶進行分割槽

1.問題描述 編寫 以給定值x為基準將鍊錶分為兩部分,所有小於x的結點排在大於或等於x的結點之前 給定乙個鍊錶的頭結點 listnode phead,請返回重新後的鍊錶的頭指標 注意 分割以後原來的資料順序不變 不要開闢新的空間,即不要新建節點 2.我們可以定義幾個指標把給出的鍊錶分為兩部分,左邊的...

T SQL 訪問遠端資料庫並對其資料表進行操作

概述 很多時候我們需要在.net應用程式中使用一條sql語句來訪問來自不同伺服器 不同資料庫中的不同的表,實現方法有很多。我們可以在.net應用程式中建立資料訪問層,使用ado.net entity framework將我們的資料庫以及資料表抽象成應用程式物件,進而在程式裡使用code來對不同庫當中...