sql server 如何实现 迭乘

sql server 怎么实现 迭乘
现在有一张表tba(Id int, Adjust int)
数据:
1,10
1,20
1,3,
2,10
2,20

等到结果 
-- 10*20*3 
1  600
-- 10*20
2  200
------解决思路----------------------
;WITH T AS(
SELECT ROW_NUMBER()OVER(PARTITION BY Id ORDER BY GETDATE())RN
,*
FROM tba
)
,CTE AS(
SELECT Id,Adjust,RN FROM T
WHERE RN=1
UNION ALL
SELECT T1.Id,T1.Adjust*T2.Adjust,T1.RN
FROM T T1
JOIN CTE T2 ON T1.Id=T2.Id
AND T1.RN=T2.RN+1
)
SELECT Id,MAX(Adjust)Adjust FROM CTE
GROUP BY Id
没有累乘,可以考虑用递归
------解决思路----------------------
DECLARE @sql varchar(max)
SET @sql = ''

;WITH /* 测试数据
tba(Id, Adjust) AS (
    SELECT 1,10 UNION ALL
    SELECT 1,20 UNION ALL
    SELECT 1, 3 UNION ALL
    SELECT 2,10 UNION ALL
    SELECT 2,20
),*/
t1(id,expr) AS (
    SELECT id,
           Stuff((SELECT '*'+Convert(varchar(11),adjust)
                    FROM tba AS b
                   WHERE b.id = a.id
                     FOR XML PATH('')
                  ),
                  1,1,'')
      FROM (SELECT DISTINCT id FROM tba) AS a
)
SELECT @sql = @sql + ' UNION ALL
       SELECT '+Convert(varchar(11),id)+' id,'+expr+' value'
 FROM t1

SET @sql = STUFF(@sql,1,12,'')
--PRINT @sql
EXEC(@sql)

         id       value
----------- -----------
          1         600
          2         200

--@sql
       SELECT 1 id,10*20*3 value UNION ALL
       SELECT 2 id,10*20 value

------解决思路----------------------
引用:
;WITH  
tba(Id, Adjust) AS (
    SELECT 1,10 UNION ALL
    SELECT 1,20 UNION ALL
    SELECT 1, 3 UNION ALL
    SELECT 2,10 UNION ALL
    SELECT 2,20

SELECT Id,power(10, Sum(Log10(Adjust))) 
 from tba
 group BY Id

这种最简单
涨姿势了...