我有一个包含两个字段的简单报告:ID和NAME。 我想按ID或NAME对细节进行排序,具体取决于用户在运行时选择的参数。
我尝试过这样的事情:
<sortField name="sort" type="Variable"/>
<variable name="sort" class="java.lang.String">
<variableExpression>
<![CDATA[$P{ord}.equals("name") ? $F{entity}.getName() : $F{entity}.getId().toString()]]>
</variableExpression>
</variable>
编辑1:我将数据源作为参数传递,我不会从JasperReports执行sql查询。 我想我可以将数据源alredy传递给JasperReports,但是我想直接从报告中对数据进行排序。
编辑2:我查看了以前的代码,对我来说效果很好。
答案 0 :(得分:0)
只需创建一个带有默认值“ID”的参数“Sort_order”,并在查询中添加order by子句。
SELECT...
FROM..
ORDER BY $P!{Sort_order} DESC
答案 1 :(得分:0)
您可以在SELECT中使用ORDER BY子句。但是,有时您需要通过jasper对数据进行排序,因为内部化或类似的事情。解决此问题的一种方法是选择特殊列进行排序(POSTGRESQL):
SELECT
id, name,
(CASE WHEN $P!{Sort_order}='id' THEN id ELSE null END) sort_id,
(CASE WHEN $P!{Sort_order}='name' THEN name ELSE null END) sort_name
FROM
your_table;
然后按列sort_name
和sort_id