繁体   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