2012-11-06 72 views
0

我有这样的where子句:BIRT报表 - 在SQL查询中使用相同的参数乘次

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条款exacly一样以上。

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

是否有我的问题的解决方案?

回答

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数据库中使用这种方法。

+0

这里的参数名称是什么?BIRT如何获取它们? – mounaim

1

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

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

这会给出一个错误。

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

某些数据库还支持WITH语法为?参数分配别名。 This blog post解释了如何使用这个。

+0

刚刚得到了很多错误。 :(我正在使用查询生成器 – Slim

+0

哪个数据库?使用Oracle时有一种解决方法:http://enterprisesmartapps.wordpress.com/2011/01/10/re-using-parameters-in-birt-data-set/ –

+0

我正在使用microsoft sql server – Slim

相关问题