WHERE 子句中的 SSRS 参数值
SSRS Parameter values in WHERE clause
(编辑清理)
我有一个包含多值参数的 SSRS 报告。我需要的是参数的每个值都对应于 "where" 子句中的条件。
所以我的查询是这样的:
select stuff,...
WHERE
column A != column B OR
column C != column D OR...
就这样一直往下。只有当不同的列对之间存在差异时才给出结果。
所以希望我描述得很好。因此,例如,如果上面是我的 where 子句,我希望参数具有如下值:
"Difference between A & B"
"Difference between C & D"
并且能够 select 多个...因此只有用户 select 的那些被合并。
编辑 - 部分解决方案 ****************************************** *****
好的,我有逻辑,多亏了汉诺威拳头的正确指导,我想出了这个:
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
...等等.....
这样,如果参数未被 selected,where 子句的那部分将查找该列不等于其自身的结果——所以 none,当然.. .
但是,还有一个问题。如果我只选择 1 个参数值,这在 SSRS 中有效,但如果我选择多个参数值,我会收到错误 "charindex function requires 2 to 3 arguments." >-(
我部署了它,它吐出的东西略有不同:
参数数据类型 nvarchar 对于 charindex 函数的参数 3 无效
关于 SSRS 对此的处理方式有点乱,但我不确定是什么。
我不太明白你是如何尝试做到这一点的。
如何在 SQL 中包含 WHERE 子句并使用参数来确定是否使用了 WHERE 的那部分?这可能不是您真正需要的,但应该让您了解我的意思。
WHERE (ColA <> ColB or CHARINDEX("Where1", @Parameter) = 0)
您的参数会将 Where1 作为选择之一(对于 Value - Label 可能更具描述性)。如果选择它,CHARINDEX 结果将 not 是 0 而 ColA < > ColB 条件需要为真才能显示该记录。
为您需要的每个 parameter/WHERE 组合重复。
知道了。
如上编辑,此代码有效(从汉诺威拳头向这个方向的帮助推动):
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语句如
WHERE 列 IN (@Parameter)
这就是为什么当我选择了多个时它会抱怨的原因。在这里合并优秀的选择答案:
Passing multiple values for a single parameter in Reporting Services
解决了剩下的问题:)
当您将多值参数传递给数据集时
使用表达式
加入多值参数
= JOIN(Parameters!multivalue parameter.Value,",")
(编辑清理)
我有一个包含多值参数的 SSRS 报告。我需要的是参数的每个值都对应于 "where" 子句中的条件。
所以我的查询是这样的:
select stuff,...
WHERE
column A != column B OR
column C != column D OR...
就这样一直往下。只有当不同的列对之间存在差异时才给出结果。
所以希望我描述得很好。因此,例如,如果上面是我的 where 子句,我希望参数具有如下值:
"Difference between A & B" "Difference between C & D"
并且能够 select 多个...因此只有用户 select 的那些被合并。
编辑 - 部分解决方案 ****************************************** *****
好的,我有逻辑,多亏了汉诺威拳头的正确指导,我想出了这个:
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
...等等.....
这样,如果参数未被 selected,where 子句的那部分将查找该列不等于其自身的结果——所以 none,当然.. .
但是,还有一个问题。如果我只选择 1 个参数值,这在 SSRS 中有效,但如果我选择多个参数值,我会收到错误 "charindex function requires 2 to 3 arguments." >-(
我部署了它,它吐出的东西略有不同:
参数数据类型 nvarchar 对于 charindex 函数的参数 3 无效
关于 SSRS 对此的处理方式有点乱,但我不确定是什么。
我不太明白你是如何尝试做到这一点的。
如何在 SQL 中包含 WHERE 子句并使用参数来确定是否使用了 WHERE 的那部分?这可能不是您真正需要的,但应该让您了解我的意思。
WHERE (ColA <> ColB or CHARINDEX("Where1", @Parameter) = 0)
您的参数会将 Where1 作为选择之一(对于 Value - Label 可能更具描述性)。如果选择它,CHARINDEX 结果将 not 是 0 而 ColA < > ColB 条件需要为真才能显示该记录。
为您需要的每个 parameter/WHERE 组合重复。
知道了。
如上编辑,此代码有效(从汉诺威拳头向这个方向的帮助推动):
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语句如 WHERE 列 IN (@Parameter)
这就是为什么当我选择了多个时它会抱怨的原因。在这里合并优秀的选择答案:
Passing multiple values for a single parameter in Reporting Services
解决了剩下的问题:)
当您将多值参数传递给数据集时 使用表达式
加入多值参数= JOIN(Parameters!multivalue parameter.Value,",")