簡體   English   中英

根據其他記錄更新記錄

[英]Update record based on the other record

我有一個這樣的表,我想用基於前一條記錄的值更新基於記錄的AttemptNumber列的值。

交易ID 用戶身份 重試 嘗試次數
1個 12 錯誤的 0
2個 12 真的 1個
3個 12 真的 2個
4個 12 錯誤的 0
5個 12 真的 1個
6個 12 真的 2個
7 12 錯誤的 0

每當我遇到Retry值為“False”時,我都想將AttemptNumber保持為0

每當我遇到Retry值為“真”時,我都想增加AttemptNumber中的值。 目前我在表中沒有 AttemptNumber 列,我將創建該列並根據“重試”中存在的值更新值。

您需要根據Retry列中的值定義組並適當地對行編號:

測試數據:

SELECT *
INTO Data
FROM (VALUES
   (1, 12, 'False', 0),
   (2, 12, 'True',  0),
   (3, 12, 'True',  0),
   (4, 12, 'False', 0),
   (5, 12, 'True',  0),
   (6, 12, 'True',  0),
   (7, 12, 'False', 0)
) v (TxnId, UserId, Retry, AttemptNumber)

陳述:

; WITH UpdateCTE AS (
   SELECT 
      TxnId, UserId, Retry, AttemptNumber,
      ROW_NUMBER() 
         OVER (PARTITION BY UserId, GroupId ORDER BY TxnId) - 1 AS NewAttemptNumber
   FROM (
      SELECT 
         *,
         SUM(CASE WHEN Retry = 'False' THEN 1 ELSE 0 END) 
            OVER (PARTITION BY UserId ORDER BY TxnId) AS GroupId
      FROM Data
   ) t  
)
UPDATE UpdateCTE
SET AttemptNumber = NewAttemptNumber

結果:

交易編號 用戶身份 重試 嘗試次數
1個 12 錯誤的 0
2個 12 真的 1個
3個 12 真的 2個
4個 12 錯誤的 0
5個 12 真的 1個
6個 12 真的 2個
7 12 錯誤的 0

你可以使用這個代碼

declare @x int=0
update t1 set
[AttemptNumber]=iif(t1.Retry=1,@x,0),
@x=iif(t1.Retry=1,(@x + 1),0)
from t1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM