我有一个jasper报告要做,有这样的数据:
Item | Quantity | Color
------+-----------+--------
A001 | 1 | Red
A001 | 1 | Green
B002 | 3 | Red
B002 | 3 | Purple
报告按项目/数量分组,例如
Item: A001, Qty: 1, Colors: Red,Green
Item: B002, Qty: 3, Colors: Red,Purple
现在我已经有了这个Jasper报告已经按照这样的方式进行分组 - 即显示项目和数量的标题,以及下面的颜色列表。
现在的问题是,在这个组的下方,我需要显示一些水平线(对于有人写东西),等于项目的数量。例如在A001组下方我需要显示一行,在B002组下我需要显示三行,如下所示:
Item A001, Qty 1, Colors Red, Green
_________________________
Item B002, Qty 3, Colors Red, Purple
_________________________
_________________________
_________________________
我尝试过查看jasper脚本,但似乎只能操作报表参数/变量。
有没有人知道我该怎么做?
答案 0 :(得分:0)
以下是您可以做的事情:
使用此源数据(MySQL):
create table items (
item varchar(4),
quantity number,
color varchar(10),
);
(插入数据......)
create table numbers (i integer)
(插入数据0,1,2 ...... MySQL 5.1具有可以执行此操作的存储过程,早期版本需要外部脚本来填充它。从0到最大数量)。< / p>
然后,诀窍是制作正确的查询。我想出了这个:
select i.*, n.i from
(
select concat(i.item, ' ', i.quantity) as grouping, i.item, i.quantity,group_concat(distinct color) as colors
from items i
GROUP BY item, quantity
) i
cross join numbers n
where quantity > n.i;
E.g。如果我填充我的数字表,并使用您的示例数据填充项目表,然后运行我得到的查询:
+----------+------+----------+------------+------+
| grouping | item | quantity | colors | i |
+----------+------+----------+------------+------+
| A001 1 | A001 | 1 | Red,Greem | 0 |
| B002 3 | B002 | 3 | Red,Purple | 0 |
| A001 1 | A001 | 1 | Red,Greem | 1 |
| B002 3 | B002 | 3 | Red,Purple | 1 |
| A001 1 | A001 | 1 | Red,Greem | 2 |
| B002 3 | B002 | 3 | Red,Purple | 2 |
| A001 1 | A001 | 1 | Red,Greem | 3 |
| B002 3 | B002 | 3 | Red,Purple | 3 |
+----------+------+----------+------------+------+
然后在您的Jasper报告中,诀窍是创建一个在“分组”列中工作的组/乐队,并将您的标题放入其中:
Item A001, Qty 1, Colors Red, Green
然后,在详细信息部分中,只有一行作为细节中的唯一内容。
这样做可以为我生成您想要的报告。
请注意,numbers
表有点愚蠢,但它是一种标准的数据仓库技术,但我怀疑某些数据库(例如Oracle)会有聪明的递归过程或其他不需要它的函数。
答案 1 :(得分:0)
好的,最后,这是使用细节页脚部分中的子数据集和交叉表完成的。很好地工作 - 感谢所有贡献的人:)