我有 7 个报告都使用相同的查询,除了 where 子句中的一行。如何将这些组合成 1 个报告并根据所选的报告类型更改行。
代码示例 Select a.remark from notes a where a.code in (:rpt_parm)
:rpt_parm 有 7 个选项,但我似乎无法让查询接受我放入值中的值列表或使用返回列表的数据集。
注意我将 SSRS 2016 与 VS2015 和 Oracle 数据库连接一起使用。
我有 7 个报告都使用相同的查询,除了 where 子句中的一行。如何将这些组合成 1 个报告并根据所选的报告类型更改行。
代码示例 Select a.remark from notes a where a.code in (:rpt_parm)
:rpt_parm 有 7 个选项,但我似乎无法让查询接受我放入值中的值列表或使用返回列表的数据集。
注意我将 SSRS 2016 与 VS2015 和 Oracle 数据库连接一起使用。
您可以更改您的查询以简单地接受类似这样的报告类型(MS-SQL ...抱歉没有 Oracle 实例):
declare @report_type int;
select *
from remarks a
where (@report_type = 'POU Remarks' and a.remarks in ('P100', 'P105', 'P0110'))
or (@report_type = 'POD Remarks' and a.remarks in ('P200', 'P205', 'P210'))
or ...;
这太棒了。参数中每个选项的值中的逗号分隔字符串,然后在查询的参数部分上,您使用 split 函数。
我承认我对 SSRS 还很陌生,我们正面临着严重的时间紧缩,要在年底之前将 100 份 Discoverer 报告转换为 SSRS。但是我的编程强迫症让我想在第一次尽可能正确地做到这一点。
我非常感谢帮助。
否定上面的,它只返回列表中的第一个值
我假设列表是指逗号分隔的列表?
从 SSRS 报告中,最好的方法是将参数列表传递到存储过程中。它将被接受为单值字符串。在存储过程中,您需要将字符串拆分为字符串表,然后使用该表根据字符串值字段加入查询的其余部分。
我不确定我是否正确理解了这个问题,但我会试一试。
我认为您可以有一个helper
包含两列的表格,option
并且value
. 对于每个选项,您拥有的行数与该选项的值一样多。(因此,一个值可能会出现不止一次 - 与使用该值的选项一样多。)
然后,您只需输入选项编号,例如:option
。您的查询应该是:
... where a.code in (select value from helper where option = :option)
如果性能是一个问题,您可以在option
. 这应该比任何基于逗号分隔字符串的解决方案更好。