我有一个这样的表,我想更新AttemptNumber
的值基于记录的列,其值基于前一条记录。
每当我遇到Retry
值为“False”,那么我想保留 AttemptNumber
如0
.
每当我遇到Retry
值为“True”,那么我想增加 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
结果:
关于sql - 根据其他记录更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71419501/