时间段动态列求和

博客内容涉及如何在SQLite数据库中对特定时间段内的数据进行分组求和。提出了一个问题,展示了一张表格数据,讨论了如何根据名字和时间段生成交叉报表格式的结果,指出在SQL中实现动态列较困难,但可以通过SPL脚本来轻松解决。同时,提到了在Java中调用SPL脚本的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【问题】

表如下:
名字  数据    时间
A        2    20140101
B        3    20140107 
C        4    20140104
A        3    20140109
A        1    20140206
C        3    20140301 
C        2    20140201
A        1    20140207
为名字和分时间段求和,能不能直接查询出如下格式?
名字 201401 201402 时间段3………………
A     5           2           ……       ………………
B     3           0           ……       ………………
C     4           2 3        ……       ………………

【回答】

如果是为了做报表,这属于典型的交叉报表需求,使用任何支持横向扩展的报表工具都能完成,如在润乾报表里可以这样完成:

报表数据集SQL:select 名字,left(时间,6) as 时间,数据 from SHIP_BERTH

报表表达式:

undefined

undefined

如果计算不是为了出报表,而是为其他程序提供该格式的数据源,这种动态列结果集用SQL就很难完成了,需要动态生成SQL语句。用 SPL很容易实现:

AB
1$ select 名字,left(时间,6) as 时间,数据 from SHIP_BERTH
2= A1.groups(名字,时间;sum(数据):数据)
3=A2.pivot(名字;时间,数据)

A1:从数据库取数

A2:按“名字”,“时间”分组,并分组对“数据”求和

A3:对A2序表的“时间”和“数据”列数据行列互换

最终返回序表为:

undefined

脚本写好后,在其他应用程序中,就可以利用集算器JDBC调用该数据集了。Java 如何调用 SPL 脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值