分组后离散记录引用

针对一张包含ID、Title和Number字段的表,需求是按Title字段分组,使得每组内Number总和为800。在SQL中,通过窗口函数可以实现这一目标,但在无窗口函数支持的数据库中,实现较为复杂。此外,使用集算器SPL脚本进行处理,可以直观地修改分组内的Number值,实现效果更佳。
摘要由CSDN通过智能技术生成

【问题】

有一张表,表结构、数据如下
ID       Title      Number
1          A        200
2          A        300
3          B        400
4          C        500
想要的结果
1          A      500
2          A      300
3          B      800
4          C      800
也就是按Title字段分组后的的Number都为800,如果Ttile存在相同的则改变小的值,使相同的两项和为800;
如结果:两项A和为800 在ID为1(Number=200)的基础上加上300,B为800,C为800,sql语句如何实现,求教,不胜感激!

【回答】

       SQL的集合无序,需要先用子查询造个序号才能实现跨行有序计算,有了窗口函数后的实现已经简化了许多(没有则会更难写得多得多),但脚本仍然比较难懂。

       如果是JAVA的主程序,SPL脚本要直观易懂且不受数据库对窗口函数的支持限制,脚本如下:

A
1$SELECT ID,Title,Number FROM TB ORDER BY   Title,Number
2>A1.group(Title).run(~(1).Number=(800-~.sum(Number)+~(1).Number))

A1:sql取数,按照 Title,Number排序

A2:根据Title分组(集算器的分组会保留分组明细),然后再循环每个分组,修改组内第一个Number值。修改后,A1即为所得结果:

写好的脚本如何在应用程序中调用,可以参考Java 如何调用 SPL 脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值