代码之家  ›  专栏  ›  技术社区  ›  Fritz H

贾斯珀报告:两个细节部分?

  •  0
  • Fritz H  · 技术社区  · 16 年前

    我有一份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报告,它已经分组了,比如,显示了一个标题,上面有项目和数量,下面有一个颜色列表。

    现在的问题是,在这个组下面,我需要显示一些水平线(供某人写入内容),这些水平线等于物品的数量。e、 g.在A001组下面我需要显示一行,在B002组下面我需要显示三行,如下所示:

    Item A001, Qty 1, Colors Red, Green
              _________________________
    
    Item B002, Qty 3, Colors Red, Purple
              _________________________
              _________________________
              _________________________
    

    我试过查看jasper脚本,但它们似乎只能操作报表参数/变量。

    有人知道我该怎么做吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Jamie Love    16 年前

    嗯,很有趣。

    以下是您可以做的:

    create table items ( 
    item varchar(4), 
    quantity number,   
    color varchar(10),
    );
    

    (插入数据…)

    create table numbers (i integer)
    

    (插入数据0、1、2….MySQL 5.1有存储过程可以做到这一点,早期版本需要一个外部脚本来填充它。从0到最大数量)。

    然后,诀窍是设计正确的查询类型。我想到了这个:

    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;
    

    例如,如果我填充我的数字表,并使用您的示例数据填充项目表,然后运行我得到的查询:

    +----------+------+----------+------------+------+
    | 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 table有点傻,但它是一种标准的数据仓库技术,尽管我怀疑某些数据库(例如Oracle)可能会有聪明的递归过程或其他函数,而不需要它。

        2
  •  0
  •   Fritz H    15 年前

    好的,最后,在细节页脚部分使用了一个子数据集和一个交叉表。工作很好-感谢所有贡献者:)