我有一个包含多个输入控件的报告,用于填充另一个输入控件。
我的输入控件:
填充 NDC 的查询包含此 WHERE 子句:
WHERE (
REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i')
OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i')
)
OR ($X{IN, GPI, gpi})
它的工作原理是 $X
语法 - 如果用户没有从列表中选择 GPI 值,我的 NDC 输入控件显示所有药物代码。但是,我只想在实际从 GPI 输入控件中选择一个值时显示药物代码。
当我尝试
时 WHERE (
REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i')
OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i')
)
OR ($X{IN, GPI, gpi} AND $P{gpi} IS NOT NULL)
我在 NDC 输入控件的 JasperReports Server 中获得了无效的列类型。
当我尝试
时 WHERE (
REGEXP_LIKE(DESCRIPTION, $P{name_lookup}, 'i')
OR REGEXP_LIKE(NDC, $P{name_lookup}, 'i')
)
OR ($X{IN, GPI, gpi} AND $P!{gpi} IS NOT NULL)
我得到了一个缺失的表达错误。
如何将 NDC 输入控件的结果限制为仅选定的 GPI ,而不是所有结果?
答案 0 :(得分:2)
我在遇到同样的问题时发现了这个问题,我终于使用第二个参数解决了这个问题:
<parameter name="potentially_empty_list" class="java.util.Collection"/>
<parameter name="num_of_list_elements" class="java.lang.Integer" isForPrompting="false">
<defaultValueExpression>
<![CDATA[$P{potentially_empty_list}.size()]]>
</defaultValueExpression>
</parameter>
然后SQL查询将是:
[... select etc...]
WHERE $X{IN,mysql_column_name, ist}
AND $P{num_of_list_elements} > 0
将空列表发送到mysql:
WHERE 0 = 0 #(that's how jasper parses $X{IN..} for an empty collection
AND 0 > 0 # don't match anything :)
答案 1 :(得分:0)
有一个有趣的选择,因为$ X {NOTIN,...}在空列表的情况下也会计算为0 = 0.
因此你可以这样做:
($X{IN, cs.companyid, companyIds}
AND NOT
($X{NOTIN, cs.companyid, companyIds}))