Jasper reports JasperReports:子报表中的空resultset将向主报表返回空变量

Jasper reports JasperReports:子报表中的空resultset将向主报表返回空变量,jasper-reports,Jasper Reports,我在JR报告中有一个子报告,它向主报告返回一个值。如果子报表中的结果为空,则变量返回为null,因此对该返回值执行的所有计算都将变为null。我试过很多东西,比如 $V{ReturnValue}==null?0:$V{ReturnValue} $V{ReturnValue}.toString().equals(null)?。。。。。 还有许多其他愚蠢的事情,但都是出于本能。 我在很多网站上读了很多关于SO的帖子,但是除了一篇不太好的帖子外,没有人回答过这个问题 雅虎!由于上帝的恩典,我对自己的

我在JR报告中有一个子报告,它向主报告返回一个值。如果子报表中的结果为空,则变量返回为null,因此对该返回值执行的所有计算都将变为null。我试过很多东西,比如

$V{ReturnValue}==null?0:$V{ReturnValue}
$V{ReturnValue}.toString().equals(null)?。。。。。
还有许多其他愚蠢的事情,但都是出于本能。

我在很多网站上读了很多关于SO的帖子,但是除了一篇不太好的帖子外,没有人回答过这个问题

雅虎!由于上帝的恩典,我对自己的问题做出了很好的回答。发布它,因为它可能在将来帮助某人

1) I changed my Simple SQL Query with a MySQL stored procedure as.
我的存储过程是

BEGIN
SET @m = '0';
SELECT x.*, y.* FROM 
     (select 1 as "ID", @m:=acc as "Account", Amount from tbl_reports) x
     right JOIN 
     (SELECT if(@m='0',0,1) as "IDU") y
ON y.IDU = x.ID;
END
在IReport中,我将变量声明为

$F{IDU}==1?$F{Amount}:0
这样,它现在显示的是0.00而不是null。它实际上做的是

解释

1) 它设置了一个@m变量,默认值为“0”

2) 然后,若它在那个里找到x表的任何一行,它就会用新的帐户名替换@m

3) 当涉及到y表时,它会检查@m是否已更改,如果已更改,则放入1


4) 在IReport中,我们的变量表达式表示,如果IDU的平均值为1,则resultset中有一行,如果为0,则表示没有行,而put为0。

Yahoo!由于上帝的恩典,我对自己的问题做出了很好的回答。发布它,因为它可能在将来帮助某人

1) I changed my Simple SQL Query with a MySQL stored procedure as.
我的存储过程是

BEGIN
SET @m = '0';
SELECT x.*, y.* FROM 
     (select 1 as "ID", @m:=acc as "Account", Amount from tbl_reports) x
     right JOIN 
     (SELECT if(@m='0',0,1) as "IDU") y
ON y.IDU = x.ID;
END
在IReport中,我将变量声明为

$F{IDU}==1?$F{Amount}:0
这样,它现在显示的是0.00而不是null。它实际上做的是

解释

1) 它设置了一个@m变量,默认值为“0”

2) 然后,若它在那个里找到x表的任何一行,它就会用新的帐户名替换@m

3) 当涉及到y表时,它会检查@m是否已更改,如果已更改,则放入1

4) 在IReport中,我们的变量表达式表示,如果IDU的平均值为1,则表示resultset中有一行,如果为0,则表示没有行,而put为0