0

ID と NAME の 2 つのフィールドを持つ単純なレポートがあります。実行時にユーザーが選択したパラメーターに応じて、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 クエリを実行しません。ソート済みのデータソースを JasperReports に渡すことはできると思いますが、レポートから直接データをソートしたいと思います。

編集 2: 以前のコードを確認したところ、問題なく動作しました。

4

2 に答える 2

0

SELECT で ORDER BY 句を使用できます。ただし、内部化などのために、データをジャスパーでソートする必要がある場合があります。この問題を解決する方法の 1 つは、そのようなソート用に特別な列を選択することです (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_namesort_id

于 2015-02-26T12:16:49.487 に答える