累乘的SQL写法
ID A B
1 0.2 A1*A2*A3 = 0.024
2 0.3 A2*A3 = 0.12
3 0.4 0.4
请问用SQL怎么写出来?
------解决思路----------------------
非技术区,可以0分贴啊~~
你参考一下
;WITH ROWCTE AS(
SELECT ROW_NUMBER()OVER(ORDER BY ID) RN,* FROM 你的表
)
,CTE AS(
SELECT TOP 1 *,CAST(A AS DECIMAL(19,4)) B FROM ROWCTE ORDER BY ID DESC
UNION ALL
SELECT T1.*,CAST(T2.B*T1.A AS DECIMAL(19,4)) FROM ROWCTE T1 INNER JOIN CTE T2 ON T1.RN+1=T2.RN
)
SELECT * FROM CTE ORDER BY ID
/*结果如下
1 1 0.2000 0.0240
2 2 0.3000 0.1200
3 3 0.4000 0.4000*/
------解决思路----------------------
你要递归的是里面的乘积M,而不是结果B
;WITH tmpng(ID,BD) AS (
SELECT 0,Convert(real,0.0) UNION ALL
SELECT 1,0.0 UNION ALL
SELECT 2,0.1 UNION ALL
SELECT 3,0.1 UNION ALL
SELECT 4,1.0 UNION ALL
SELECT 5,0.3 UNION ALL
SELECT 6,2.0
)
,ROWCTE AS(
SELECT ROW_NUMBER()OVER(ORDER BY ID) RN,* FROM tmpng
)
,CTE AS(
SELECT TOP 1 *,
1/(1-BD*0.01) M,
CAST( ROUND( (1/(1-BD*0.01)-1)*100 ,4) AS DECIMAL(19,3)) B
FROM ROWCTE
ORDER BY ID DESC
UNION ALL
SELECT T1.*,
T2.M*1/(1-T1.BD*0.01) M,
CAST( ROUND( (T2.M*1/(1-T1.BD*0.01)-1)*100 ,4) AS DECIMAL(19,3)) B
FROM ROWCTE T1
INNER JOIN CTE T2
ON T1.RN+1=T2.RN
)
SELECT * FROM CTE ORDER BY ID
RN ID BD M B
----- ---- ----- ---------------------- -------
1 0 0 1.03588750585399 3.589
2 1 0 1.03588750585399 3.589
3 2 0.1 1.03588750585399 3.589
4 3 0.1 1.03485161834814 3.485
5 4 1 1.03381676672979 3.382
6 5 0.3 1.02347859906249 2.348
7 6 2 1.02040816326531 2.041