0

数据库表 - 运行记录

Name      Student_ID   Meter(m)   Time(s)
ABC       1016         100        13   

ABC       1016         200        26

ACB       1017         100        15

BAA       1018         100        18

BAA       1018         200        22

BBB       1019         100        14

CDE       1020         200        22

CDE       1020         100        14

我应该怎么做才能在 Jasper 报告中得到以下结果?

                      Student Run Record

                  ABC           ACB           BAA        BBB         CDE
100M              13            15            18         14          14
200M              26                          22                     22
4

2 回答 2

3

您可以通过使用crosstab元素来实现这一点。

我使用了您提供的查询,我的示例中有这些字段:

  • 名称:字符串
  • 米:长
  • 时间:长

从 Palette拖放crosstab到报表设计器中报表的摘要带中,将弹出一个向导。

按照向导:

  • 选择包含查询的数据集。
  • 配置为行计量器,分组设置为唯一,作为您选择名称的列,分组也设置为 唯一
  • 作为度量,您使用Time,并将聚合器更改为Sum(除了count,因为每个学生只有一个值,并且距离总和将与值相同)。

添加交叉表后,单击 Report Inspector 并展开交叉表,单击 row groups > Meter 并在 Properties 面板中选择 as Total Position:None。与列组 > 名称相同。

然后输出将如下图所示。

报告草案

为了使输出更接近您在查询中起草的内容:

  • 在 Report Inspector 中选择 Row Groups > Meter,在 Properties 面板中将 Bucket Value Class 更改为java.lang.String。然后在设计器中编辑保存的字段$V{Meter}并将其更改为 $V{Meter} + "m"输出100m而不是100
  • 为了隐藏0,请在设计器中单击包含度量的字段并将其从 更改$V{TimeMeasure}$V{TimeMeasure} == 0 ? null : $V{TimeMeasure}在属性面板中,选中属性Blank when null的复选框。

完成报告

于 2013-01-21T10:58:14.320 回答
0

更改报表行组的桶表达式。通过连接几个字段来制作桶表达式。例如:

<bucket class="java.lang.String">
    <bucketExpression><![CDATA[$F{field1}+""+$F{field2}]]></bucketExpression>
</bucket>
于 2014-06-24T06:29:48.960 回答