自定义分页
SQL 自定义分页实现方案
报表自带分页功能,但当数据过大时,建议进行 SQL 自定义分页(手动)
基础版实现
实现思路
- SQL 查询总记录数,固定每页行数,得出总页数
- 用动态参数表征翻页功能,传参到主数据集中查询对应数据行
具体步骤
1. 建立计算总页数数据集(命名"分页")
select decode(ceil(count(1)/13),'0','1',ceil(count((1)/13) 总页数
from tableA
where 1=1
--and 其他条件 --同主数据集中where 筛选条件一致
2. 建立主数据集(命名"ds1")
select * from (
select rownum row_num, a.* from (
select /*+parallel(t,4)*/ cloumn1,column2,...,cloumnN
from tableA t
where 1=1
--and 其他条件
--order by cloumn1 desc nulls last --排序
) a --order by cloumn1 desc nulls last --排序
)
where row_num > (${a}-1)*13
and row_num <= ${a}*13
--order by cloumn1 desc nulls last --排序
以上写法根据数据源不同,可以采用不同写法,一般通用可以用row_number() over()来写。
3. 页面布局设置
在主要模块下方(例如在 A4 所在行)放置翻页按钮,依次从左至右单元格放置字段或插入文字及其对应动态参数:
| 单元格 | 内容 | 动态参数 |
|---|---|---|
| A4 | 总页数 | 列隐藏 |
| 首页 | a = 1 | - |
| 上一页 | a = if(a=1,1,a-1) | - |
| 下一页 | a = if($a = A4, A4, $a + 1) | - |
| 末页 | a = A4 | - |
| 富文本 | 共${=if(A4==0,1,A4)} 页,当前第${=$a}页 | - |
4. 其他配置
- 对于当前行设置条件属性:如果
$$$ <=1则行高为 0 - 模板参数默认
a = 1 - 如果页面存在筛选后查询控件:
- 添加不显示 label,命名为
a,控件值为字符串1 - 保证筛选后查询页面页码始终从第一页开始
- 添加不显示 label,命名为
增强版实现
样式优化
- 可以使用 CSS 修改圆角等样式
- 可以增加控件,设置自定义每页显示记录数(参数控件),不固定为 13 或其他值
工具栏实现
可以在参数面板中加入 button 等按钮,形似工具栏:
设置参考如下:

效果参考如下:



浙公网安备 33010602011771号