在SSRS数据集SQL查询中创建新行以在报表参数中使用

时间:2015-09-25 11:12:15

标签: sql-server reporting-services ssrs-2008-r2

我将带着一些SQL绕圈子,并希望得到一些帮助。

我已经查找了创建临时表,嵌套的Select语句(其中的建议似乎是为了避免像瘟疫一样)以及Case语句的各种用法,但我似乎无法找到有效的解决方案。我会说我是SQL的初学者。

我有一张包含10条相关记录的表格。用于返回表中所有相关条目的查询是:

SELECT
     TblServAct.ServActId   
    ,TblServAct.ServActName  
FROM TblServAct 
WHERE TblServAct.ServActExclude IS NULL 
ORDER BY TblServAct.ServActName

这是我遇到问题的地方:

当参数(@YESNOActivity)= Yes时,我希望返回表中的所有行。我已经设法用CASE声明

来做到这一点

...但是当参数(@YESNOActivity)= No时,我只想要返回一行,该行实际上不存在于表中(并且不应该插入到实际的表中)。我需要插入的值是:ServActId = 101和ServActName ='在Parameter2中选择YES以按服务活动过滤'

对于背景,我这样做的原因是因为我发现SSRS报告参数特别难以有条件地格式化。我想使用上面的数据集在参数中返回一个消息(让我们称之为参数2),用户需要在(@YESNOActivity)中选择是,以便在parameter2中查看完整的选择列表。

如果我可以让这个工作,我可以看到很多重复使用的潜力所以所有的建议值得赞赏

由于 艾琳

2 个答案:

答案 0 :(得分:0)

我相信这应该可以完成这项工作,只需在WHERE子句中包含您的参数,并将UNION包含在您自己的数据行中。

SELECT
     TblServAct.ServActId   
    ,TblServAct.ServActName  
FROM TblServAct 
WHERE TblServAct.ServActExclude IS NULL
  AND @YESNOActivity = 'Yes'
UNION ALL
SELECT
     ServActId = 101
    ,ServActName = 'Select YES in Parameter2 to filter by Service Activity'
WHERE @YESNOActivity = 'No'
ORDER BY TblServAct.ServActName

答案 1 :(得分:0)

一种方法是使用此查询:

SELECT 
  TblServAct.ServActId   
  ,TblServAct.ServActName  
FROM TblServAct 
WHERE TblServAct.ServActExclude IS NULL 
  AND 'Yes' = @YESNOActivity
UNION ALL
SELECT 
  101 AS ServActId 
  ,'Select YES in Parameter2 to filter by Service Activity' AS ServActName
WHERE 'No' = @YESNOActivity
ORDER BY TblServAct.ServActName

另一种方法是创建两个数据流并在约束中使用您的变量将处理发送到其中一个。

第三种方法是在SQL命令上放置一个表达式,并使用你的变量在两个SQL语句之间切换。