SQL SERVER实现相同性质的不同行对应整形字段的乘法运算(sql server 行之间乘法运算)

最近一段时间看了很多算法相关的书籍,深感自己知识缺乏的同时也伴随着脑洞的大开;

近日老同事问起一个问题,描述如下:

问题:

具有相同性质的不同行如何在sql server中实现乘法运算,实例如下:


Column1 Column2 Column3 Column4
89                       012G E123456 2
89                       012G E123456 2
89                       012G E123456 4
89                       012G E123456 20
梅州市 智林软件科技 有限公司 100
梅州市 智林软件科技 有限公司 100
梅州市 智林软件科技 有限公司 100
梅州市 智林软件科技 有限公司 100
梅州市 智林软件科技 有限公司 100

最终要实现Column1,2,3相同的行的Column4之间相乘,得出以下结果:

Column1 Column2 Column3 result
89                       012G E123456 320
梅州市 智林软件科技 有限公司 10000000000


分析:

鉴于这个功能的实现是要用sql来完成,首先想了下怎么利用聚合函数之类的来实现相乘,貌似没有提供类似sum,avg这样的乘法函数,于是想到可以通过标注Row_Number来构建一个递归,然后用with语句来实现递归相乘得到最终结果。


代码:

 select *,ROW_NUMBER() over (partition by Column1,Column2,Column3 order by Column4) as row
into #temp_table from Table_1;
select * from #temp_table ;
with 智林软件 as
(
select *,convert(bigint,Column4) as result
from #temp_table 
where  row = 1
union all
select a.*,b.result*a.Column4 as result
from #temp_table a
inner join 智林软件 b on b.Column1=a.Column1 and b.Column2=a.Column2 and b.Column3=a.Column3 and b.row=a.row-1
)
select Column1,Column2,Column3,MAX(result) as result from 智林软件 group by Column1,Column2,Column3 

结果:






猜你喜欢

转载自blog.csdn.net/lego2816/article/details/46467949