[英]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.