【发布时间】:2011-11-13 13:00:12
【问题描述】:
我有一个典型的 MySQL 报告,每页列出一个“项目”。其中一个字段是 min_price。我想让我的详细范围列出每个项目的固定数字(比如说 15)“投标金额”,根据此起始价格计算,加上作为报告参数传入的“滑动比例”,如下所示:
<parameter name="bidIncrementMap" class="java.util.TreeMap">
<defaultValueExpression><![CDATA[{10,1},{25,2},{50,5},{100,10},{250,20},{500,25},{9999,50}"]]></defaultValueExpression>
</parameter>
为了一个单独的目的,我已经有一个名为 alphabet 的表,它有 26 行 id=1..26, letter=A..Z - 这使得表格很方便,可以获取 15 个整数的简单列表。
所以要获得与给定数字对应的出价增量值,我认为应该是:
$P{bidIncrementMap}.floorEntry($F{each_bid}).getValue()
...但我想做的是使用每一行的出价增量来获得下一行的价值。
另外,出于打包原因,我需要将它作为一个独立的 .jrxml 编译为 .jasper,而类路径上没有任何新的自定义类。
我觉得我真的很接近了.. 有人可以帮我解决这里丢失的部分吗? (仅供参考,我是 Java 和 SQL 专家,但是 Jasper 新手,喜欢我目前所看到的......)我想我需要以某种方式声明一个变量并使用此映射每次递增它,然后以某种方式获取列表组件来显示我的序列 - 我更喜欢将它全部放在一个报告中,因为我看不到重复使用这样的子报告,但是任何一种方式的示例都很棒。
我使用 @ 变量和复杂的 if 语句对 SQL 表达式进行了一些处理 - 这不是我的问题的重点,但我将其包括在内是为了说明我在这里想要实现的目标:
mysql> select a.id, i.name, i.min_price, @b:=if(a.id=1,i.min_price,@b+if(@b<10,1,if(@b<25,2,if(@b<50,5,if(@b<100,10,if(@b<250,20,if
@b<500,25,50))))))) bid from items i, alphabet a where a.id<=15 and i.id=27 order by a.id;
+----+---------------+-----------+--------+
| id | name | min_price | bid |
+----+---------------+-----------+--------+
| 1 | My Item Name | 40.00 | 40.00 |
| 2 | My Item Name | 40.00 | 45.00 |
| 3 | My Item Name | 40.00 | 50.00 |
| 4 | My Item Name | 40.00 | 60.00 |
| 5 | My Item Name | 40.00 | 70.00 |
| 6 | My Item Name | 40.00 | 80.00 |
| 7 | My Item Name | 40.00 | 90.00 |
| 8 | My Item Name | 40.00 | 100.00 |
| 9 | My Item Name | 40.00 | 120.00 |
| 10 | My Item Name | 40.00 | 140.00 |
| 11 | My Item Name | 40.00 | 160.00 |
| 12 | My Item Name | 40.00 | 180.00 |
| 13 | My Item Name | 40.00 | 200.00 |
| 14 | My Item Name | 40.00 | 220.00 |
| 15 | My Item Name | 40.00 | 240.00 |
+----+---------------+-----------+--------+
15 rows in set (0.00 sec)
【问题讨论】:
标签: java mysql jasper-reports ireport