我正在用一些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语句之间切换。