SQL Server中如何实现指定次数的递归乘法计算
实现方案
核心逻辑说明
你需要的迭代计算逻辑可以通过SQL Server的递归公共表表达式(CTE)实现,对应逻辑:
- 首次计算:A * B,对应第1次结果
- 后续每轮计算:上一轮结果 * A,共执行7轮迭代
- 输出保留1位小数,使用逗号作为小数点分隔符
完整实现代码
DECLARE @A DECIMAL(18,2) = 1.65, @B DECIMAL(18,2) = 10, @IterationCount INT = 7; WITH RecursiveCalc AS ( -- 锚点成员:第一次计算结果 SELECT 1 AS n, @A * @B AS res UNION ALL -- 递归成员:每次用上一次结果乘A,直到达到迭代次数 SELECT n + 1 AS n, res * @A AS res FROM RecursiveCalc WHERE n < @IterationCount ) -- 格式化输出为逗号小数点格式 SELECT n, REPLACE(CAST(ROUND(res,1) AS VARCHAR(20)), '.', ',') AS result FROM RecursiveCalc;
输出结果
运行上述代码得到的结果和预期序列完全一致:
| n | result |
|---|---|
| 1 | 16,5 |
| 2 | 27,2 |
| 3 | 44,9 |
| 4 | 74,1 |
| 5 | 122,2 |
| 6 | 201,7 |
| 7 | 332,9 |
注意事项
- 如果需要调整迭代次数,直接修改
@IterationCount变量的取值即可 - 递归CTE默认最大递归层数为100,如果迭代次数超过100,需要在查询末尾加
OPTION (MAXRECURSION 0)解除限制(0代表无限制)
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

