1. 概述
1.1 应用场景
数据集中的排序是指通过 SQL 直接在数据库查询时排序。此方法性能最佳,但所有计算都必须要在数据库中做,会导致 SQL 很复杂,难以维护,另外有些计算是无法用 SQL 完成的。因此建议仅使用 SQL 实现一些简单的,单一的「升序」或「降序」。
本文将介绍在定义数据集时使用 SQL 语句可以设置的排序类型。
1.2 ORDER BY 关键字
ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。默认按照「升序」进行排序,即 ASC 关键字;如果需要按照「降序」排序,可以使用 DESC 关键字。
例如:
升序:SELECT * FROM 销量 order by 销量
降序:SELECT * FROM 销量 order by 销量 desc
2. 示例
2.1 升序
新建普通报表,新建「数据库查询」,输入 SQL 语句为:SELECT * FROM 销量 order by 销量
点击预览,即可看到数据按「销量」列升序排序,如下图所示:
2.2 降序
新建普通报表,新建「数据库查询」,输入 SQL 语句为:SELECT * FROM 销量 order by 销量 desc
点击预览,即可看到数据按「销量」列降序排序,如下图所示:
2.3 多列排序
新建普通报表,新建「数据库查询」,输入 SQL 语句为:SELECT * FROM 销量 order by 英文简称,销量
点击预览,即可看到数据先按「英文简称」列升序排序,「销量」列再按对应的「英文简称」升序排序,如下图所示:
2.4 动态排序
定义一个数据集参数,通过在标题添加「动态参数」实现点击标题动态排序。
2.4.1 数据准备
新建普通报表,新建数据库查询 ds1,SQL 查询语句为:SELECT * FROM 销量 where 地区='华北' order by 销量 ${a}
定义了一个数据集参数 a,用来表示排序 asc 或 desc 。如下图所示:
注:如果需要两个字段均设置动态参数,SQL 语句可修改为:SELECT * FROM 销量 where 地区='华北' order by 销量 ${a},销售员 ${a}
2.4.2 设计报表
将数据集中的数据拖入表格,设置 A2 单元格数据设置为「列表」,报表样式如下图所示:
2.4.3 添加动态参数
选中「销量」标题所在 E1 单元格,添加一个「超级链接>动态参数」,参数即为在 SQL 中设置的参数 a ,参数值输入公式:if(a="desc","asc","desc")。
注:a 默认为 asc。
2.4.4 效果预览
1)PC 端
保存报表,点击「分页预览」,效果如下图所示。
2)移动端
App 端和 HTML5 端均支持,效果如下图所示:
3. 模板下载
已完成模板可参见:
%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\SpecialSubject\OrderReport\点击标题动态排序.cpt
点击下载模板:点击标题动态排序.cpt
4. 注意事项
4.1 MySQL 中文排序无效
如果 MySQL 数据库无法实现按中文拼音首字母排序,需要看一下表字段是否使用的是 UTF-8 编码,如果使用的是 UTF-8 编码,则需要使用 MySQL 的 convert 方法转换成 GBK 编码进行排序。且前提是 MySQL 安装了 GBK 字符集,不然会报错。
SQL 语句如下:
升序:SELECT * FROM 销量 order by convert(英文简称 using gbk)
降序:SELECT * FROM 销量 order by convert(英文简称 using gbk) desc