分组后离散记录引用
【问题】
有一张表,表结构、数据如下
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 脚本