2013-02-04 13 views
0

我已經使用Ireport 4.5創建了一個報告,但報告運行速度很慢,我認爲僅僅是因爲多個UNION和JOINS。如何從Ireport調用時在程序中調用和添加條件?

我複製用於測試目的的簡單查詢: -

SELECT b.Project_Id, 
     b.Project_Manager, 
     b.project_title, 
     b.Project_location, 
     b.Project_Level, 
     SUM(COALESCE(b.Project_Budget, 0)) Projected, 
     SUM(COALESCE(c.Accounting, 0)) Actual 
    FROM t_authorized_budget a, t_project_c b,t_project_allocation c 
    WHERE a.Project_Id = b.Project_Id and b.project_id=c.`Key` 
     and a.Project_Id = c.`Key` 
     and $X{IN,b.project_location,p_project_location} 
     and $X{IN,b.project_manager,p_project_manager} 
     and $X{IN,b.project_id,p_project_id}; 

因此,我創建使用此查詢,但過程調用GetAllcompo()不

 $X{IN,b.project_location,p_project_location} 
     and $X{IN,b.project_manager,p_project_manager} 
     and $X{IN,b.project_id,p_project_id}; 

我現在想添加這些在從Ireport呼叫的過程中的條件。 我該怎麼做?

回答

0

您是否需要使用該程序?我通過添加另一個參數來完成此操作首先,提示用戶定義什麼類型的WHERE子句你使用:

$P{PROJECT_PROMPT} 

,然後創建一個第二個參數($ P {} PROJECT_SQL_DEF)使用默認的表達式,定義你的WHERE子句:

$P{PROJECT_PROMPT} == 'SHORT' ? 
     " ' a.Project_Id = b.Project_Id 
     and b.project_id=c.Key 
     and a.Project_Id = c.Key '" : 

     " ' a.Project_Id = b.Project_Id and b.project_id=c.`Key` 
     and a.Project_Id = c.`Key` 
     and $X{IN,b.project_location,p_project_location} 
     and $X{IN,b.project_manager,p_project_manager} 
     and $X{IN,b.project_id,p_project_id} ' " 

在您的查詢:

SELECT b.Project_Id, 
    b.Project_Manager, 
    b.project_title, 
    b.Project_location, 
    b.Project_Level, 
    SUM(COALESCE(b.Project_Budget, 0)) Projected, 
    SUM(COALESCE(c.Accounting, 0)) Actual 
FROM t_authorized_budget a, t_project_c b,t_project_allocation c 
WHERE $P!{PROJECT_SQL_DEF} 
+0

另一個想法 - 如果你傳遞一個空至$ X {...它等於1 = 1。那麼如果你使用完整的WHERE子句會發生什麼,只是不要傳遞參數給$ X {...? – Lisa

+0

我認爲如果我們沒有將任何參數傳遞給$ X {},這意味着沒有任何條件的所有值。您怎麼看? – Sharad

+0

沒錯,它就像「和$ X {IN,b.project_location,p_project_location}」被替換爲「1 = 1」。它會給你所有的b.project_location值。 – Lisa

相關問題