4

我已经尝试计算行所属的某些类别的出现次数(请参阅SQL 计算行所属的某些类别的出现次数

但是现在我想知道,如果不做 sql 的事情,jasper 报告是否能够做到这一切?自己做总结而不给数据库服务器额外的工作(这实际上发生在我身上)?

例如,这可能是我的报告:

name | color | flavor
--------------------------
n1   | green | lemon
n2   | blue  | strawberry
n3   | red   | lemon
n4   | green | lemon
n5   | green | mango
n6   | red   | chocolate
n7   | white | lemon
n8   | blue  | mango
n9   | green | chocolate

这将是我想得到的总结:

colors | occurrences         flavor    | occurences
--------------------         ----------------------
green  |   4                 lemon     |   4
blue   |   2                 strawberry|   1
red    |   6                 mango     |   2
white  |   1                 chocolate |   2
4

1 回答 1

2

你有 3 个选项:

  1. 有 2 个子报告,并在每个订单中按颜色和风味选择。并在每个子报告摘要中将它们作为主摘要的一部分。当 SQL 数据排序时,您可以在 iReport 中为每个列创建组,并以变量计数每个组。缺点是您为每个子报告去数据库 2 次。

  2. 拥有自己的数据源java实现。这就像一个不进行任何数据转换的数据代理。只有 HashMap 计算颜色和味道的出现。然后作为带有报告评估的附加字段“报告”从数据源获取此字段并将它们放在报告中。你只去 DB 一次。

  3. 结合 print if 表达式和定义的组(颜色、风味)和 print if 表达式可以帮助联合所有选择语句:

    select a,b,c 'print_to_detail' as print_if_field, ' ' as dummy_field
    union all
    select a,b,c 'print_to_group1_summary' as print_if_field, color as dummy_field order by color
    union all
    select a,b,c 'print_to_group2_summary' as print_if_field, flavor as dummy_field order by color

也许这有助于作为概念性的想法。

于 2012-11-26T10:28:38.707 回答