2012-10-12 65 views
0

可變我有一個結果集與列:排序結果集根據iReport的

interval_start(timestamp) , camp , queue , other columns 
2012-09-10 11:10   c1  q1 
2012-09-10 11:20   c1  q2 

interval_start由具有像間隔在10分鐘內的值:

2012-09-10 11:10, 

2012-09-10 11:20, 

2012-09-10 11:30 .... 

使用約達時間庫和interval_start字段,我創建了一個變量來創建字符串等如果分鐘interval_start介於00-30之間,則以分鐘設置30,否則以分鐘設置00。

我想組數據:

camp as group1 
variable created as group2 
queue as group3 

,並做了一些聚集

但在我的報告結果,我收到在相同的時間間隔相同的隊列很多時間。
我已經使用order by camp, interval_start, queue但問題仍然存在。

附加屏幕截圖,供大家參考:

enter image description here

有什麼辦法根據創建的變量進行排序結果集

回答

0

最好的猜測會是你的實際SQL查詢的問題。你說同一個隊列正在重複,但是從看你的圖像來看,它實際上並沒有重複,它是一個不同的行。

您的查詢將很難結束,因爲您確實希望您的查詢具有order by camp, (rounded)interval_start, queue的訂單。如果沒有,則按camp列排序,然後選擇interval_start的非舍入版本,然後按camp排序。當意味着數據的順序不正確時,Jasper Reports會以您想要的方式對它們進行分組。然後真正的踢球者是賈斯珀報告沒有功能來排序數據一旦得到它。這取決於開發人員。

所以,你有幾個選擇:

  1. 更新您的SQL查詢做你的時間四捨五入。根據數據庫的不同,這是以不同的方式完成的,但可能需要某種類型的存儲過程或函數來處理它(例如,請參閱此TSQL function)。
  2. 而不是在報表中查詢sql查詢,將它移出報表並處理數據,在java端進行舍入和排序。然後通過它作爲REPORT_DATASOURCE參數。
  3. 將一列添加到您的表中以存儲舍入的時間。您可以創建觸發器來處理數據庫中的所有內容,而無需更改應用程序中的任何其他代碼。

老實說這兩個選項都不理想,我希望有人出面,並提供一個答案,證明我錯了。但我認爲目前還沒有更好的方法。

相關問題