SSRS中的条件参数

时间:2016-12-13 11:01:38

标签: sql sql-server reporting-services parameters

是否有更有效的方法为SSRS报告创建SQL查询,根据参数值,它将返回根据日期字段过滤的记录:1 =所有行没有结束日期2 =所有行结束日期3 =所有行,不管参数值如何。我已经提出了下面的查询但是使用布尔值它需要一个或者声明对于每个条件都是重复的(我必须添加更多的条件!

我遇到的另一个问题是使用IF或CASE时 - 我收到一条错误消息,指出sclar变量无效。当我声明并使用默认值设置参数时,它可以工作。但不确定CASE / IF在这种情况下是否理想?谢谢。

loginStatus: function () {
                   return $http.post('api/users/loginStatus');  
             }

1 个答案:

答案 0 :(得分:0)

如果您稍微更改一下查询,实际上没有重复的代码,忽略对@Parameter值的检查:

select t1.field_seq_no
      ,t1.field_end_dt
      ,t2.area_off

from table t1
  inner join MyTable2 t2
    on t1.comp_id = t2.comp_id 
      and t1.prty_ref = t2.prty_id
      and t2.area_off IN (@area)    -- This part is consistent so doesn't need to be repeated.

where (@Parameter = 1
       and t1.field_end_dt is null
      )
  or (@Parameter = 2
      and t1.field_end_dt is not null
     )
  or @Parameter = 3;

当然,如果您认为过滤语句不应该在JOIN子句中,您可以使用一些额外的括号将其放在WHERE中:

select t1.field_seq_no
      ,t1.field_end_dt
      ,t2.area_off

from table t1
  inner join MyTable2 t2
    on t1.comp_id = t2.comp_id 
      and t1.prty_ref = t2.prty_id

where t2.area_off IN (@area)    -- This part is consistent so doesn't need to be repeated.
  and (
         (@Parameter = 1
           and t1.field_end_dt is null
         )
      or (@Parameter = 2
          and t1.field_end_dt is not null
         )
      or @Parameter = 3
      );