对分组后的各组前几名做合并
【问题】
How to print each group with certain amount of records which the limit was set by end user when using group in ireport subreport?
Table table1:
ID NAME GENDER AGE
3 Nicholas M 17
5 Michael M 20
6 John F 18
6 Aaron M 16
6 Hale F 21
6 Lke F 19
6 Lsmael F 18
6 Brthur M 17
6 Quincy F 20
6 Sam M 18
【回答】
打印各组前 N 条记录,可以在数据源阶段处理,但很多数据库不支持窗口函数,比如 MYSQL。所以可以考虑用集算器辅助 jasper 来实现。代码如下:
A |
|
1 |
$select * from table1 |
2 |
=A1.group(GENDER) |
3 |
=A2.(~.top(-3;AGE)) |
4 |
=A3.conj() |
5 |
return A4 |
A2:对表数据做分组
A3:取组内 AGE 的前 N 条最大记录
A4:合并各组
A5:将 A4 结果集返回 jasper
Jasper 可以通过 JDBC 连接集算器,调用脚本方法很简单,可参考Java 如何调用 SPL 脚本。