回答

收藏

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

技术问答 技术问答 222 人阅读 | 0 人回复 | 2023-09-12

我想使用BIRT创建报告。我有五个SQL作为报告参数的条件。通常,当我有三个条件时,我会JavaScript的WHERE嵌套用于句子中if-else。& B+ A& o- ]# [1 A; d6 {% t- Z
由于我现在有更多的条件,编写代码和检查的可能性变得更加困难,特别是为了调试。, r3 t- H/ i4 {4 ?9 @
例如,表格员工的标准有以下五个条件:年龄、城市、部门、职称和教育水平。所有条件都是动态的,你可以把它保留在空白中来显示所有内容。
5 J( Q/ }* z$ g; X9 p; w: H有人知道这种方法的替代方法吗?" n; Y; Q' f( h& ?& B
                                                                4 Z/ d% y7 e- d7 Q3 t3 t8 I
    解决方案:                                                                0 z' v. }/ S$ d$ x4 V, v# U
                                                                有一种神奇的方法可以在没有任何脚本的情况下处理这个问题,这使得报告的维护更容易!我们可以用这个SQL查询:3 |) B; B5 F$ ]* n1 R  u4 G6 E% l
SELECT *FROM mytableWHERE (?='' OR city=? )AND (?=-1 OR age>? )AND (?='' OR department=? )AND (?='' OR title=? )因此,每个条件都有两个数据集参数,其中 OR当参数获得特定值(空值或空值)时,可以忽略条件(如你所愿)。所有这些" v. v& q$ `; m9 @. R
OR子句均采用恒定值求值,不影响查询性能。
1 ]- G1 u; X' |4 m在这个例子中,我们应该有4个报告参数,8个数据集参数(每个报告参数绑定到2个数据集参数)和0个脚本。在这里查看使用此方法的报告的实时示例。7 c8 d. f+ q) T1 p9 h! I
如果有更多的标准,我建议您使用存储过程,因此每个标准只需要一个数据集参数就可以执行相同的操作。
+ G* `+ |. r! T处理整数参数7 |& `& }$ a. b5 t; N! |0 z4 W
如果需要整数列(例如)age)处理所有值:我们可以 报表参数age”声明为String类型,数据集参数
$ n4 d. R( ^) u+ A) a4 H7 M0 P* Xage声明是整数。然后,在数据集的参数选项卡中,使用值表达式而不是链接到报表参数。例如,如果我们喜欢一个强大的输入,它可以处理所有、空和空值,可以输入以下表达式:
6 s+ z9 o) |' W0 ^( a: U5 ~3 d  f5 A(params["age"].value=="all" || params["age"].value=="" || params["age"].value==null)?-1:params["age"].value样本报告可以在这里下载(v 4.3.1)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则