我正在尝试基于处理事务的oracle SQL查询在iReport中创建报表。所涉及的实际表格非常冗长,与问题无关。我正在尝试创建一个报表,当交易金额满足以下3个标准中的1个时,该报表将返回结果:
我正在尝试创建一个选择列表参数,其中运行报表的人可以在上述规范之一中进行选择。在我实际创建参数之前,我一直在尝试在SQL Developer中测试查询。我试图实现此问题的查询行是:
alias.transaction_amount :amountRange
我的测试输入是“介于1000和9999之间”。当在查询中硬编码时,它工作正常,但当我尝试通过此输入传入它时,我得到一个“无效的关系运算符”错误。
还有另一种方法吗?
答案 0 :(得分:1)
尝试在查询中使用这样的:
select table from table1 where transaction_amount $ P!{paramReport}
来自JasperReports终极指南:
$P{paramName} Syntax
The parameters are used like normal java.sql.PreparedStatement parameters, using
the following syntax:
<queryString>
<![CDATA[
SELECT * FROM Orders WHERE OrderID <= $P{MaxOrderID} ORDER BY
ShipCountry
]]>
</queryString>
$P!{paramName} Syntax
Sometimes it is useful to use parameters to dynamically modify portions of the SQL
query or to pass the entire SQL query as a parameter to the report-filling routines. In
such cases, the syntax differs a little, as shown in the following example. Notice the !
character:
<queryString>
<![CDATA[
SELECT * FROM $P!{MyTable} ORDER BY $P!{OrderByClause}
]]>
</queryString>
答案 1 :(得分:0)
在与一些同事交谈后,我们发现了一个更好的解决方案,虽然我不知道我正在寻找的方法是否真的可行,但这个解决方案更加直观。
alias.transaction_amount between (CASE WHEN $P{Range} = 0
THEN 1000.00
WHEN $P{Range} = 1
THEN 2500.00
ELSE 10000.00
END)
and
(CASE WHEN $P{Range} = 0
THEN 2499.99
WHEN $P{Range} = 1
THEN 9999.99
ELSE 9999999.99
END)
使用带有switch参数的case语句可以很好地工作,如果有一笔10亿美元或更高的交易,它们将被排除,但最大数量可以根据需要进行调整。