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



我正在用一些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报告参数特别难以有条件地格式化。我想使用上面的数据集在参数中返回一条消息(让我们称之为parameter2),用户需要在(@YESNOActivity)中选择yes,以便在parameter2中看到完整的选择列表。

如果我能让这个工作,我可以看到很多重用的潜力,所以感谢所有的建议

谢谢艾琳

我相信这应该可以完成工作,只需在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

一种方法是使用以下查询:

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语句之间切换。

最新更新