如何在iReport中有条件地传递参数?

时间:2013-11-21 16:54:35

标签: jasper-reports ireport

有没有办法在iReport中有条件地添加参数?

在我的一个报告中,我想根据其值传递参数。以下是报告查询:

从学生中选择姓名,设计,班级 class = $ P {calss} AND joinYear = $ P {joinYear}

我想仅在传递joinYear时添加joinYear条件,如果joinYear的值为空,则只应用一个条件。

有没有办法在iReport中查看报告查询中的条件?

3 个答案:

答案 0 :(得分:2)

你可以试试这个: -

      SELECT name,
             desi,
             class 
      FROM student 
      WHERE (class=$P{calss} or $P{calss} is null ) 
             AND (joinYear=$P{joinYear} or $P{joinYear} is null)

在这种情况下,您只传递参数值的任何参数都将在查询中传递。

答案 1 :(得分:1)

您可以尝试使用子报表。创建一个虚拟主报表,它将报表作为子报表,使用虚拟查询(如

select 1 as dummy

并添加变量ie。 $V{joinYearCond}带表达式

($P{joinYear} == "" || $P{joinYear} == null) ? "" : "and joinYear = " + $P{joinYear}

同时修改报表中的查询(现在是子报表)

select name,desi,class from student where class=$P{calss} $P!{joinYearCond}

对于参数$P{joinYearCond},传递$V{joinYearCond}的值。它看起来不漂亮,但它会起作用。

答案 2 :(得分:0)

创建一个新参数joinYear_query并设置为DEFAULT VALUE EXPRESSION

 $P{joinYear}==null  ? " true": " joinYear=".concat($P{joinYear}.toString())

然后

select name,desi,class from student where class=$!P{calss} AND $P!{joinYear_query}

您可以在以下位置查看更多详情: Accepting null values as parameters in jasper report