我有一个报告(BIRT),用户为其中一个参数选择一个字符串值。然后,在一个数据集查询中使用该参数的值。我想要实现的是,当选择特定值时,我需要报告还在查询中搜索1-3个其他预定义值。例如,如果用户选择F-MAC,我希望数据集返回类别为F-MAC的所有结果,以及C-CDB,F-FMB和M-MAC。如果他们选择F-DAMAGE,数据集应返回类别为F-DAMAGE以及M-DAMAGE的所有结果。
参数Categories是静态的,有4个值可用。
以下是查询:
select
WO_WORKORDER,
WO_STATUS,
WO_DATE_COMPLETED,
PH_PHASE,
PH_STATUS,
WO_CATEGORY,
WO_CATEGORY_DESC,
WO_DEPT_DESC,
WO_DEPT_ID,
WO_FACILITY_DESC,
WO_BUILDING_DESC,
FTD_TRAN_TYPE,
FTD_AMOUNT,
FTD_TM_TYPE
from VW_WO_BILLING
where
WO_TYPE = 'F'
and WO_STATUS = 'CLOSED'
and PH_STATUS = 'CLOSED'
and FTD_TRAN_TYPE in ('CW','WX','TW','TP')
and WO_CATEGORY = ?
and
(wo_dept_id = ? or ? = 'ALL')
and TRUNC(WO_DATE_COMPLETED) >= ?
and TRUNC(WO_DATE_COMPLETED) <= ?
and FTD_AMOUNT <> 0
?对于WO_CATEGORY,将参数中选择的值传递给查询。
答案 0 :(得分:1)
我在beforeOpen脚本中使用了this.queryText = this.queryText.replace和if / else语句。
答案 1 :(得分:0)
您为组合框选项创建另一个表
ComboBox Table1
Category_ID, Name
1, F-MAC
2, F-DAMAGE
有条件的类别Table2
SubCategory_ID, Category_ID, Name
1 1 F-MAC
2 1 C-CDB
3 1 F-FMB
4 1 M-MAC
5 2 F-DAMAGE
6 2 M-DAMAGE
并更新您的查询
SELECT *
FROM
Table1 T1
INNER JOIN Table2 T2
ON T1.Category_ID = T2.Category_ID
INNER JOIN VW_WO_BILLING A
ON T2.Name = A.WO_CATEGORY
WHERE
Table1.Category_ID = ?
因此,如果来自组合框的CATEGORY_ID = 2
,那么将匹配aditional表中的名称F-DAMAGE and M-DAMAGE
。