(编辑清理)
我有一个带有多值参数的SSRS报告。我需要的是参数的每个值对应于“where”子句中的条件。
所以我的查询是这样的:
select stuff,...
WHERE
column A != column B OR
column C != column D OR...
就像那样一直向下。只有在不同的列对之间存在差异时才能给出结果。
所以希望我能很好地描述它。因此,例如,如果以上是我的where子句,我希望参数具有如下值:
“A& B之间的差异” “C& D之间的区别”
并且能够选择多个...所以只有用户选择的那些被合并。
编辑 - 部分解决方案******************************************* ***
好的,我有逻辑,感谢Hannover Fist的正确方向,我提出了这个:
WHERE
col 1 <> CASE WHEN CHARINDEX("Where1",@Parameter) = 0 THEN col 1 ELSE col 2 END OR
col 3 <> CASE WHEN CHARINDEX("Where2",@Parameter) = 0 THEN col 3 ELSE col 4 END
...等.....
这样,如果没有选择参数,那么where子句的那一部分会查找该列不等于自身的结果 - 所以没有,当然......
然而,仍有一个问题。如果我只选择1个参数值,这适用于SSRS,但如果我选择多个参数值,我会收到错误“charindex函数需要2到3个参数”。 &GT; - (
我部署了它,它吐出一些略有不同的东西:
参数数据类型nvarchar对于charindex函数的参数3无效
有关SSRS处理此问题的事情是flapdoodle,但我不确定是什么。
答案 0 :(得分:1)
关于你是怎么做的,我有点模糊。
如何在SQL中使用WHERE子句并使用参数来确定是否使用了WHERE的那一部分?这可能不是你需要的,但应该让你知道我的意思。
WHERE (ColA <> ColB or CHARINDEX("Where1", @Parameter) = 0)
您的参数将 Where1 作为其中一个选项(对于值 - 标签可能更具描述性)。如果选择, CHARINDEX 结果不 0 , ColA&lt;&gt; ColB 条件必须为true才能显示该记录。
重复您需要的每个参数/ WHERE组合。
答案 1 :(得分:0)
知道了。
如上所述,此代码有效(从汉诺威拳头向这个方向推动):
WHERE
col 1 <> CASE WHEN CHARINDEX("Where1",@Parameter) = 0 THEN col 1 ELSE col 2 END OR
col 3 <> CASE WHEN CHARINDEX("Where2",@Paremeter) = 0 THEN col 3 ELSE col 4 END
等...
参数问题对我的经验来说是新的,但简单地说(这不常做 - 因此我的困难:-P),SSRS包括参数值之间的逗号(这是有意义的,因为我们可以使用IN语句如 列IN(@Parameter)
这就是为什么当我选择多个时抱怨的原因。在这里纳入精选的答案:
Passing multiple values for a single parameter in Reporting Services
解决了剩下的问题:)
答案 2 :(得分:0)
将多值参数传递给数据集时 使用表达式
连接多值参数= JOIN(Parameters!multivalue parameter.Value,",")