BIRT报告 - 在SQL查询中多次使用相同的参数

时间:2012-11-06 12:31:16

标签: eclipse birt

我有这个where子句:

WHERE p.ROLE = 'doctor'
AND((p6.PA_Name='Event_Day_From' AND p6.PA_Value>= SUBSTRING('01.01.2012', 1, 2))
AND (p7.PA_Name='Event_Month_From' AND p7.PA_Value>=SUBSTRING('01.01.2012', 4, 2))
AND (p8.PA_Name='Event_Year_From' AND P8.PA_Value>=SUBSTRING('01.01.2012', 7, 4)))
AND ((p9.PA_Name='Event_Day_To' AND P9.PA_Value<=SUBSTRING('30.12.2012', 1, 2))
AND (p10.PA_Name='Event_Month_To' AND P10.PA_Value<=SUBSTRING('30.12.2012', 4, 2))
AND (p11.PA_Name='Event_Year_To' AND P11.PA_Value<=SUBSTRING('30.12.2012', 7, 4)))

在上面之后我有一个union all,最后我有另一个WHERE条款与上面的相同。

在BIRT中,可以传递一个参数,您必须在需要传递的SQL查询中插入?。正如您所看到的,我将通过用户输入传递开始日期和结束日期。现在我的问题是我不知道如何将SDate参数传递给所有start datesEndDate参数到所有end dates

我的问题有解决方案吗?

2 个答案:

答案 0 :(得分:1)

[编辑] BIRT使用普通JDBC而不是它不支持“命名参数”,所以你不能写:

... p6.PA_Value>= SUBSTRING(:start, 1, 2) ...

这会出错。

其他选项是使用Property Binding或JavaScript构建查询,并在执行之前替换部分查询。 See this example report

某些数据库还支持WITH语法,以便为?参数指定别名。 This blog post解释了如何使用它。

答案 1 :(得分:1)

我通过创建带参数的单行表并将其附加到报表查询来解决此问题,如下所示:

,(select ? SDate, ? EDate) params
WHERE p.ROLE = 'doctor'
AND((p6.PA_Name='Event_Day_From' AND p6.PA_Value>= SUBSTRING(params.SDate, 1, 2))
AND (p7.PA_Name='Event_Month_From' AND p7.PA_Value>=SUBSTRING(params.SDate, 4, 2))
AND (p8.PA_Name='Event_Year_From' AND P8.PA_Value>=SUBSTRING(params.SDate, 7, 4)))
AND ((p9.PA_Name='Event_Day_To' AND P9.PA_Value<=SUBSTRING(params.EDate, 1, 2))
AND (p10.PA_Name='Event_Month_To' AND P10.PA_Value<=SUBSTRING(params.EDate, 4, 2))
AND (p11.PA_Name='Event_Year_To' AND P11.PA_Value<=SUBSTRING(params.EDate, 7, 4)))

希望这有帮助。

**我目前在PostgreSQL数据库上使用此方法。