报表性能优化方案之单数据集分页SQL实现层式报表
2015-09-07 10:10
621 查看
完整的sql语句如下:
SELECT * FROM ( SELECT * FROM( SELECT * FROM 订单明细 ORDER BY 订单ID ASC limit ${fr_pagesize*fr_pagenumber} ) AS e1 ORDER BY 订单ID DESC limit ${ if(fr_pagenumber == int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount - (fr_pagesize*(fr_pagenumber-1)),fr_pagesize) } ) AS e2 ORDER BY 订单ID ASC
注:上述代码放置在分页sql面板中时,要删除后面的注释语句,并且语句中的三次ORDER BY 一定不能丢。· 分页sql语句注释${if(fr_pagenumber==int( (((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount -(fr_pagesize*(fr_pagenumber-1)),fr_pagesize)}意思是:假如是最后一页的话,就取最后一页剩余的行数,假如不是最后一页就取每页需要显示的行数,示例中每页需要显示的行数为30行。fr_pagenumber:当前浏览的页数,如果预览第2页,则fr_pagenumber=2;fr_rowcount:当前数据集的总数据条数;fr_pagesize:表示设置行式引擎时,每页需显示的行数,该示例中fr_pagesize=30.在预览时,设定的分页查询根据3个变量的值,会生成数据库查询,如fr_pagenumber=2,fr_pagesize=30时,即在web端预览报表,预览至第2页时,上面的sql语句会转化为:SELECT * FROM (SELECT * FROM ( SELECT * FROM 订单明细 ORDER BY 订单ID ASC limit 60 )AS e1 ORDER BY 订单ID DESClimit30 ) AS e2 ORDER BY 订单ID ASC预览至第3页时,fr_pagenumber=3,sql语句就转化为:SELECT * FROM (SELECT * FROM ( SELECT * FROM 订单明细 ORDER BY 订单ID ASC limit 90 )AS e1 ORDER BY 订单ID DESClimit30) AS e2 ORDER BY 订单ID ASC预览至最后一页时,所剩下的数据可能不足30行,那么sql语句又会转化成什么样呢?如果fr_rowcount=100,fr_pagesize=30,即数据总行数为100行,每页显示30行,预览至最后一页,也就是第4页时,fr_pagenumber=4,sql语句将转换为:SELECT * FROM (SELECT * FROM ( SELECT * FROM 订单明细 ORDER BY 订单ID ASC limit 90)AS e1 ORDER BY 订单ID DESClimit10 ) AS e2 ORDER BY 订单ID ASC3.3报表主体设计将数据集中的数据列拖曳至单元格中。3.4行式引擎设置同上一节的设置方法,这里不再赘述。3.5效果查看点击分页预览,效果图如下:已完成模板请参照:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Advanced\PagingSql.cpt3.6数据库的分页SQL语句
SELECT * FROM ( SELECT TOP ${ if(fr_pagenumber == int((((fr_rowcount-1)/fr_pagesize)+1)),fr_rowcount - (fr_pagesize*(fr_pagenumber-1)),fr_pagesize) } * FROM( SELECT TOP ${fr_pagesize*fr_pagenumber} * FROM 订单明细 ORDER BY 订单ID ASC ) AS e1 ORDER BY 订单ID DESC ) AS e2 ORDER BY 订单ID ASC
相关文章推荐
- SQL Server 索引中包含查询字段 (INCLUDE索引)
- oracle加固
- mysql下sql语句 update 字段=字段+字符串
- 关于NoSQL的了解
- ADO.NET連接SQL2000
- MySQL数据库迁移
- mysql数据库修改编码
- mysql查询数据库表大小
- ORACLE 数据库 rman 全备份
- ubantu下MySQL数据库备份方法
- 读取数据库配置文件
- mysql安装完成无法修改密码
- oracle完全删除表空间
- Oracle pctfree和pctused详解
- MySQL读写分离Atlas
- 将sql语句置入DataTable中
- LNMP中MYSQL数据迁移
- 一千行MySQL学习笔记
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题