1

我在使用 SSRS 时遇到了一些问题,我认为这应该是非常基本的。我已经看到了一些关于 IIF 声明和其他声明的答案,但没有完全解决这个问题。

我是 SSRS 的新手,所以我不确定您可以在使用 PLSQL 的数据部分中使用什么代码/语法。

我想要做的就是有一个基于参数是否为空的 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; 
4

1 回答 1

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)
于 2013-04-24T12:59:50.677 回答