2013-04-15 25 views
0

我有一個包含兩個字段的簡單報告:ID和NAME。 我想根據用戶在運行時選擇的參數按ID或NAME對細節進行排序。根據iReport中的參數對報告進行排序

我試着做這樣的事情:

<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

只需創建一個默認值爲「ID」的參數「Sort_order」,並在查詢中添加order by子句即可。

SELECT... 
    FROM.. 
    ORDER BY $P!{Sort_order} DESC 
+0

我忘了提,我不執行SQL從JasperReports查詢 – nailujed

0

您可以在SELECT中使用ORDER BY子句。然而,有時你需要將數據由於內部化或類似的事情由碧玉進行排序。如何解決這個問題的一種方法是選擇排序像(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

相關問題