WHERE子句

时间:2015-07-24 06:47:29

标签: reporting-services parameters where

(编辑清理)

我有一个带有多值参数的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,但我不确定是什么。

3 个答案:

答案 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,",")