我有兩個值。如何將第一個值乘以第二個值,然后將該乘法的結果再次乘以第一個數字,然后再次將結果乘以第一個數字,依此類推?此類重復的次數例如 7
我有兩列 A 和 B。
- 答:1.65
- 乙:10
我需要在結果列中得到這樣的結果:
結果:
16,5, 27,2, 44,9, 74,1, 122,2, 201,7, 332,9
所以乘法是:
1.65 * 10 = 16,5
1.65 * 16,5 = 27,2
1.65 * 27,2 = 44,9
etc...
我想我應該使用遞回查詢,但我不知道如何撰寫它我正在使用 SQL Server。
uj5u.com熱心網友回復:
遞回解
with CTE as ( select 1.65 as val1, 10 as val2 ) , RCTE as ( select val1, val2, 1 as lvl , cast(val1*val2 as decimal(38,16)) as result , cast(power(val1, 1)*val2 as float) as result2 from CTE union all select val1, val2, lvl 1 , cast(val1*result as decimal(38,16)) , cast(power(val1, lvl 1)*val2 as float) from RCTE where lvl < 7 ) select * from RCTE GOval1 | val2 | 等級 | 結果| 結果2 ---: | ---: | --: | -------------------: | ------: 1.65 | 10 | 1 | 16.5000000000000000 | 16.5 1.65 | 10 | 2 | 27.2250000000000000 | 27.2 1.65 | 10 | 3 | 44.9212500000000000 | 44.9 1.65 | 10 | 4 | 74.1200625000000000 | 74.1 1.65 | 10 | 5 | 122.2981031250000000 | 122.3 1.65 | 10 | 6 | 201.7918701562500000 | 201.8 1.65 | 10 | 7 | 332.9565857578125000 | 333
db<>在這里擺弄
uj5u.com熱心網友回復:
1.65(1.65(1.65*10)) = (1.65*1.65*1.65)*10 = 1.65^3 * 10
所以重復 7 次
select power(1.65,7) * 10
uj5u.com熱心網友回復:
如果要為每個連續值生成多行,可以嘗試:
with
n as (
select 1 as i, cast(10.0 as float) as v
union all
select i 1, v * 1.65 from n where i < 10
)
select v from n order by i
結果:
v
----------------
10
16.5
27.225
44.92125
74.1200625
122.298103125
201.79187015625
332.956585757812
549.37836650039
906.474304725644
請參閱db<>fiddle 上的運行示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369115.html
標籤:sql sql-server 递归
