小编典典

IF-ELSE用于BIRT的多个SQL标准的替代方法

sql

我想使用BIRT创建报告。我有5条SQL条件作为报告的参数。通常,当我有3个条件时,我会在JavaScript的WHERE语句中使用嵌套的if-else。

由于现在我有更多的条件,因此编写代码和检查可能性变得更加困难,尤其是出于调试目的。

例如,表员工的标准具有以下5个条件:年龄,城市,部门,职称和教育程度。所有条件都是动态的,您可以将其保留为空白以显示所有内容。

有人知道这种方法的替代方法吗?


阅读 168

收藏
2021-05-30

共1个答案

小编典典

有一种无需任何脚本即可处理此问题的神奇方法,这使报告的维护变得更加容易!我们可以使用这种SQL查询:

SELECT *
FROM mytable
WHERE (?='' OR city=? )
AND (?=-1 OR age>? )
AND (?='' OR department=? )
AND (?='' OR title=? )

因此,每个条件都有两个数据集参数,其中“ OR”子句允许您在参数获得特定值(空值或空值)时忽略条件(如您所愿)。所有这些“
OR”子句均使用恒定值求值,因此不会影响查询的性能。

在此示例中,我们应该有4个报告参数,8个数据集参数(每个报告参数绑定到2个数据集参数)和0个脚本。在此处查看使用此方法的报告的实时示例。

如果有更多标准,我建议您使用存储过程,因此每个标准只需要一个数据集参数就可以执行相同的操作。

整数参数处理

如果需要为整数列(例如age)处理“所有”值:我们可以将报表参数“ age”声明为String类型,而将数据集参数“
age”声明为整数。然后,在数据集的“参数”选项卡中,使用值表达式而不是“链接到报表参数”。例如,如果我们喜欢一个健壮的输入,它可以处理“所有”,“空”和空值,则可以输入以下表达式:

(params["age"].value=="all" || params["age"].value=="" || params["age"].value==null)?-1:params["age"].value

样本报告可以在这里下载(v 4.3.1)

2021-05-30