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

Creating a new row in SSRS dataset SQL query to use in a report parameter

我正在兜圈子SQL,希望能得到一些帮助。

我查看了创建临时 tables、嵌套 Select 语句(其中的建议似乎是避免这些像瘟疫一样)和 Case 语句的各种用途,但我不能似乎找到了可行的解决方案。我会说我是 SQL 的初学者水平。

我有一个 table 有 10 条相关记录。适用于 return table 中所有相关条目的查询是:

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

这是我 运行 遇到问题的地方:

当参数 (@YESNOActivity) = Yes 时,我希望 table 中的所有行都被 returned。我设法用 CASE 语句做到了这一点

...但是,当参数 (@YESNOActivity) = 否时,我只想对一行进行 returned,而这实际上并不存在于 table 中(并且不应该是插入实际 table)。我需要插入的值是:ServActId = 101 和 ServActName = 'Select YES in Parameter2 to filter by Service Activity'

作为背景,我这样做的原因是我发现 SSRS 报告参数特别难以有条件地格式化。我想使用上面的数据集来 return 参数中的一条消息(我们称之为参数 2),用户需要 select 是 (@YESNOActivity) 才能看到完整的 select 参数 2 中的离子列表。

如果我能让它发挥作用,我会看到很多重复使用的潜力,因此感谢所有建议

谢谢 艾琳

我相信这应该可以完成工作,只需将您的参数包含在 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 语句之间切换。