Sql server 在SSRS数据集SQL查询中创建新行以在报表参数中使用
我正在用一点SQL进行循环,希望能得到一些帮助 我查阅了创建临时表、嵌套Select语句(这里的建议似乎是为了避免类似瘟疫的情况)以及Case语句的各种用法,但我似乎找不到一个有效的解决方案。我想说我是SQL的初学者 我有一张有10条相关记录的表格。用于返回表中所有相关条目的查询为:Sql server 在SSRS数据集SQL查询中创建新行以在报表参数中使用,sql-server,reporting-services,ssrs-2008-r2,Sql Server,Reporting Services,Ssrs 2008 R2,我正在用一点SQL进行循环,希望能得到一些帮助 我查阅了创建临时表、嵌套Select语句(这里的建议似乎是为了避免类似瘟疫的情况)以及Case语句的各种用法,但我似乎找不到一个有效的解决方案。我想说我是SQL的初学者 我有一张有10条相关记录的表格。用于返回表中所有相关条目的查询为: SELECT TblServAct.ServActId ,TblServAct.ServActName FROM TblServAct WHERE TblServAct.ServAct
SELECT
TblServAct.ServActId
,TblServAct.ServActName
FROM TblServAct
WHERE TblServAct.ServActExclude IS NULL
ORDER BY TblServAct.ServActName
这里是我遇到问题的地方:
当参数(@YESNOActivity)=Yes时,我希望返回表中的所有行。我已经通过一份案例陈述做到了这一点
…但是,当参数(@YESNOActivity)=否时,我只希望返回一行,该行实际上不存在于表中(并且不应插入到实际表中)。我需要插入的值是:servatid=101和servatname='在参数2中选择YES以按服务活动进行筛选'
作为背景,我之所以这样做是因为我发现SSRS报告参数特别难以有条件地格式化。我想使用上面的数据集在参数(我们称之为parameter2)中返回一条消息,用户需要在(@YESNOActivity)中选择yes以查看parameter2中的完整选择列表
如果我能做到这一点,我可以看到许多重复使用的潜力,所以所有的建议都很感激
谢谢
Eileen我认为这应该可以完成这项工作,只需将您的参数包含在
WHERE
子句中,并使用您自己的数据行将其与联合即可
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
我相信这应该可以完成这项工作,只需在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语句之间切换。一种方法是使用此查询:
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语句之间切换。Oh wow-太棒了,谢谢@NickyvV!工作完美。我找错人了,所以你帮我省了几个小时:)我想我需要去了解更多关于UNION的用法……哦,哇-太棒了,谢谢@NickyvV!工作完美。我找错人了,所以你帮我省了几个小时:)我想我需要去了解更多关于工会的用途。。