我有一個這樣的表,我想用AttemptNumber基于上一條記錄的值更新基于記錄的列的值。
| txnId | 用戶身份 | 重試 | 嘗試次數 |
|---|---|---|---|
| 1 | 12 | 錯誤的 | 0 |
| 2 | 12 | 真的 | 1 |
| 3 | 12 | 真的 | 2 |
| 4 | 12 | 錯誤的 | 0 |
| 5 | 12 | 真的 | 1 |
| 6 | 12 | 真的 | 2 |
| 7 | 12 | 錯誤的 | 0 |
每當我遇到Retryvalue 為 'False' 時,我都想保留AttemptNumberas 0。
每當我遇到Retry值為“真”時,我想增加AttemptNumber. 目前我在表中沒有 AttemptNumber 列,我將創建列并根據“重試”中存在的值更新值。
uj5u.com熱心網友回復:
您需要根據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
結果:
| TxnId | 用戶身份 | 重試 | 嘗試次數 |
|---|---|---|---|
| 1 | 12 | 錯誤的 | 0 |
| 2 | 12 | 真的 | 1 |
| 3 | 12 | 真的 | 2 |
| 4 | 12 | 錯誤的 | 0 |
| 5 | 12 | 真的 | 1 |
| 6 | 12 | 真的 | 2 |
| 7 | 12 | 錯誤的 | 0 |
uj5u.com熱心網友回復:
你可以使用這個代碼
declare @x int=0
update t1 set
[AttemptNumber]=iif(t1.Retry=1,@x,0),
@x=iif(t1.Retry=1,(@x 1),0)
from t1
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/443359.html
