如果选择1个参数,如何更改此查询以搜索多个值?

时间:2015-09-29 14:57:44

标签: sql oracle birt

我有一个报告(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,将参数中选择的值传递给查询。

2 个答案:

答案 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