我有7个报告都使用相同的查询,除了where子句中的一行。如何将这些组合成1个报告并根据所选的报告类型更改该行。
代码示例 从备注a中选择a.remark a(:rpt_parm)
中的a.code:rpt_parm有7个选项,但我似乎无法让查询接受我在值中放入的值列表或使用返回列表的数据集。
注意我正在使用SSRS 2016和VS2015以及Oracle数据库连接。
答案 0 :(得分:0)
我在列表中假设您的意思是以逗号分隔的列表?
从SSRS报告中,最好的方法是将参数列表传递给存储过程。它将被接受为单值字符串。在存储过程中,您需要将字符串拆分为字符串表,然后根据字符串值字段使用表连接到查询的其余部分。
答案 1 :(得分:0)
您可以更改您的查询,只需接受类似这样的报告类型(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 ...;
答案 2 :(得分:0)
这非常棒。逗号在参数中的每个选项的值中分隔字符串,然后在查询的参数部分,您使用拆分函数。
我承认我对SSRS相当新,我们正处于严重的时间紧迫时期,要在今年年底之前将100份Discoverer报告转换为SSRS。但是我的编程OCD让我想要第一次正确地做到这一点。
我非常感谢你的帮助。
上述说法,它只返回了列表中的第一个价值
答案 3 :(得分:0)
我不确定我是否理解这个问题,但我会试一试。
我认为你可以有一个包含两列helper
和option
的表value
。对于每个选项,您拥有与该选项的值一样多的行。 (因此,值可能会出现多次 - 与使用该值的选项一样多。)
然后,您只输入选项编号,例如:option
。您的查询应该是:
... where a.code in (select value from helper where option = :option)
如果性能有问题,您可以在option
上添加索引。这应该比基于逗号分隔字符串的任何解决方案都更好。