数据库表 - RunRecord
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
答案 0 :(得分:3)
您可以使用 crosstab
元素来实现此目的。
我使用了您提供的查询,我的示例中包含以下字段:
将Palette中的 crosstab
拖放到报表设计器中的报表摘要区域,将弹出一个向导。
按照向导:
添加交叉表后,在报表检查器中单击并展开交叉表,单击行组> Meter并在“属性”面板中选择 Total Position:None
。列组相同>名称。
然后输出如下图所示。
为了使输出更接近您在查询中草拟的内容:
java.lang.String
。然后在设计器中编辑包含$V{Meter}
的字段并将其更改为$V{Meter} + "m"
以使输出 100m 而不是 100 。$V{TimeMeasure}
更改为$V{TimeMeasure} == 0 ? null : $V{TimeMeasure}
。在“属性”面板中,选中空白时
答案 1 :(得分:0)
更改报告行组的存储区表达式。通过连接几个字段来创建存储桶表达式。例如:
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{field1}+""+$F{field2}]]></bucketExpression>
</bucket>