在SQL SERVER中执行乘法(基于SET的方法)

时间:2009-09-29 03:27:24

标签: sql sql-server sql-server-2005 tsql

假设我有一个如下表:

tblNumbers

Numbers
4  
5
3
6

使用基于SET的方法如何执行乘法,因此输出将为:

Output
360 

N.B~没有严格的规则,只有四个数字,但我更喜欢使用CTE和/或相关子查询的答案。

3 个答案:

答案 0 :(得分:9)

您可以使用利用以下数学事实的对数/指数:

log(a*b*c...*n)=log(a)+log(b)+log(c)...+log(n)

因此,您可以使用sum函数添加列的所有对数,然后取该总和的指数,得到该列的聚合乘法:

create table #tbl (val int)
insert into #tbl (val) values(1)
insert into #tbl (val) values(2)
insert into #tbl (val) values(3)
insert into #tbl (val) values(4)

select exp(sum(log(val))) from #tbl

drop table #tbl

如果内存对我有用,那么需要注意一个边缘情况...... log(0)是一个错误。

答案 1 :(得分:2)

declare @result int
set @result = 1

select @result = @result * [number]
from tblNumber

print @result

(请注意,这假定为int列且没有溢出)

答案 2 :(得分:0)

迈克尔的结果非常有效。

您可以使用递归CTE,只需定义ROW_NUMBER和自连接即可。但是为什么要这么麻烦,因为你还需要进行表格或索引扫描。