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 

结果:






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值