2013-04-24 83 views
1

我在SSRS中遇到了一些麻煩,我認爲這應該是非常基本的。我已經看到了有關IIF聲明和其他內容的一些答案,但沒有完全解決這個問題。使用IF語句的條件WHERE子句SSRS 2005

我是SSRS的新手,所以我不確定在數據部分中使用PLSQL可以使用哪些代碼/語法。

我想要做的是有一個基於參數是否爲null的if語句。我嘗試了各種語法,但它一直在拋出錯誤。有什麼建議麼?

喜歡的東西:

IF (:start_date IS NULL) THEN 

SELECT wo.wonum, wo.worktype, wo.description wo_description, wo.targcompdate, wo.assetnum,   
s.siteid, s.description s_description, 
round((wo.targcompdate - sysdate), 0) DaysTillDue 
FROM workorder wo 
INNER JOIN site s on wo.siteid = s.siteid 
WHERE 
(wo.targcompdate - sysdate) >= :Low_Day 
and (wo.targcompdate - sysdate) <= :High_Day 
and wo.siteid = :site_param 
and wo.worktype = :worktype_param; 

ELSE 

SELECT wo.wonum, wo.worktype, wo.description wo_description, wo.targcompdate, wo.assetnum,   
s.siteid, s.description s_description, 
round((wo.targcompdate - sysdate), 0) DaysTillDue 
FROM workorder wo 
INNER JOIN site s on wo.siteid = s.siteid 
WHERE 
(wo.targcompdate - sysdate) >= :Low_Day 
and (wo.targcompdate - sysdate) <= :High_Day 
and wo.siteid = :site_param 
and wo.worktype = :worktype_param 
and targcompdate between :start_date and :end_date; 

END; 

回答

1

可以使用動態SQL表達式(雖然這一般是由於棄用事項,如SQL注入),但考慮到兩個查詢之間的唯一區別是額外的最終條件,我建議以下查詢,而不是:

SELECT wo.wonum, wo.worktype, wo.description wo_description, wo.targcompdate, 
     wo.assetnum, s.siteid, s.description s_description, 
     round((wo.targcompdate - sysdate), 0) DaysTillDue 
FROM workorder wo 
INNER JOIN site s on wo.siteid = s.siteid 
WHERE (wo.targcompdate - sysdate) >= :Low_Day 
    and (wo.targcompdate - sysdate) <= :High_Day 
    and wo.siteid = :site_param 
    and wo.worktype = :worktype_param 
    and (:start_date is NULL or targcompdate between :start_date and :end_date) 
+0

這最後和聲明如何工作?它會基本上繞過,如果:start_date param是NULL? – mrshickadance 2013-04-24 13:17:28

+0

參見http://docs.oracle.com/html/A95915_01/sqopr.htm#i1004871 - 在括號內,如果*表達式爲真,則括號的*全部*被視爲真;所以如果':start_date'爲空,那麼'targcompdate'是什麼並不重要,而如果':start_date'有一個值,那麼它必須檢查'targcompdate'是否在指定的範圍內。 – 2013-04-24 13:26:17

+0

好的,謝謝。在這種情況下,我還沒有使用過多的OR,​​所以在開始的時候有點困惑。雖然有意義。再次感謝。 – mrshickadance 2013-04-24 13:43:23