Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SSRS数据集SQL查询中创建新行以在报表参数中使用_Sql Server_Reporting Services_Ssrs 2008 R2 - Fatal编程技术网

Sql server 在SSRS数据集SQL查询中创建新行以在报表参数中使用

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

我正在用一点SQL进行循环,希望能得到一些帮助

我查阅了创建临时表、嵌套Select语句(这里的建议似乎是为了避免类似瘟疫的情况)以及Case语句的各种用法,但我似乎找不到一个有效的解决方案。我想说我是SQL的初学者

我有一张有10条相关记录的表格。用于返回表中所有相关条目的查询为:

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!工作完美。我找错人了,所以你帮我省了几个小时:)我想我需要去了解更多关于工会的用途。。