如何获取上一行field1的值并将其乘以2完成计算?
如何获取field1字段的上一行值并将其乘以2?
需求说明:
- 表中第一行的
field1字段存在初始值,其余行的field1初始为NULL - 需要计算每行的
field1值为上一行field1值的2倍
测试表代码
DECLARE @varTable1 Table ( [id] [int], [field1] [decimal](18,4) ) INSERT INTO @varTable1 VALUES (1,20), (2,NULL), (3,NULL), (4,NULL)
解决方案:递归CTE
使用递归CTE可以实现这种逐行依赖的计算逻辑,代码如下:
WITH RecursiveCTE AS ( -- 锚点成员:获取第一行的初始数据 SELECT id, field1 FROM @varTable1 WHERE id = 1 UNION ALL -- 递归成员:关联上一行并计算当前行的值 SELECT t.id, CAST(r.field1 * 2 AS decimal(18,4)) AS field1 FROM @varTable1 t INNER JOIN RecursiveCTE r ON t.id = r.id + 1 ) SELECT id, field1 FROM RecursiveCTE ORDER BY id;
说明
- 锚点成员先提取出第一行的初始值,作为递归的起点
- 递归成员通过
id = r.id + 1匹配下一行,将上一行的field1乘以2得到当前行的值 - 最终返回的结果与预期输出完全一致:
id field1 1 20.0000 2 40.0000 3 80.0000 4 160.0000
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

