2015-09-25 45 views
0

我转圈圈带着几分SQL的使用,希望得到一些帮助。创建在SSRS数据集的SQL查询新的行中的报表参数

我抬头创建临时表,嵌套Select语句(其中的建议似乎是避免这些像瘟疫)和Case语句的各种用途,但我似乎无法找到一个可行的解决方案。我会说我是SQL的初学者级别。

我有10条相关记录的表。该作品以返回表中的所有相关条目的查询是:

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

这里就是我遇到的问题:

当参数(@YESNOActivity)=是,我希望中的所有行要返回的表。我设法做到这一点与CASE声明

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

对于背景,我这样做的原因是因为我发现SSRS报告参数尤其很难有条件地格式化。我想用上面的数据集在参数返回消息(可以称之为参数2)用户需要在(@YESNOActivity)才能看到在参数2的完整选择列表选择是。

如果我能得到这个工作,我可以看到很多的潜力,再利用,因此所有的建议赞赏

感谢 艾琳

回答

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 
+0

哇哦 - 这是梦幻般的感谢@NickyvV!完美的作品。我正在吠叫错误的树,所以你救了我几个小时:)我想我需要去了解更多关于UNION的使用.. – EileenS

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

+0

谢谢戴夫。第一种方法似乎起作用。 – EileenS