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

pri*_*kar 2 sql t-sql sql-server sql-server-2005

假设我有一个如下表:

tblNumbers

Numbers
4  
5
3
6
Run Code Online (Sandbox Code Playgroud)

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

Output
360 
Run Code Online (Sandbox Code Playgroud)

NB〜有没有硬性的规则,将只有四个数字,但我宁愿使用一个CTE和/或相关子查询的答案.

spe*_*der 9

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

log(a*b*c...*n)=log(a)+log(b)+log(c)...+log(n)
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用该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
Run Code Online (Sandbox Code Playgroud)

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