2012-10-12 66 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. 将一列添加到您的表中以存储舍入的时间。您可以创建触发器来处理数据库中的所有内容,而无需更改应用程序中的任何其他代码。

老实说这两个选项都不理想,我希望有人出面,并提供一个答案,证明我错了。但我认为目前还没有更好的方法。

相关问题