对分组后的各组前几名做合并

【问题】
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 条最大记录

1png

A4:合并各组

2png

A5:将 A4 结果集返回 jasper

Jasper 可以通过 JDBC 连接集算器,调用脚本方法很简单,可参考Java 如何调用 SPL 脚本