SSRS 2008中的多值参数不起作用

时间:2012-04-02 15:51:45

标签: sql sql-server-2005 ssrs-2008

我有一个参数@Department,并将其在数据集中的值设置为=Join(Parameters!Department.Value,",")。我将其设置为接受多个值,在我的SQL中,我有以下子句:(RTRIM(G.DeptName) IN (@Department))

只要用户选择了一个部门,它就可以工作,但只要选择了多个部门,它就无法工作。它运行,但它不显示任何数据。例如,如果我选择“会计”,则会显示“会计”信息。但如果我选择“会计”和“营销”,则不会显示任何内容。

为什么这不起作用的任何想法?此外,是否可以使用“字符串”值以外的其他方式执行此操作?

2 个答案:

答案 0 :(得分:3)

你做出了错误的假设。

IN ('1,2,3,4')IN (1,2,3,4)IN ('1', '2', '3', '4')

非常不同

你目前正在做的第一个。您正在检查您的部门名称是否位于仅 一个 值的列表中; @department字符串。该值中包含逗号,但它仍然是一个字符串,因此它仍然是列表中的单个项目。

您有两种选择。

动态构建SQL,使列表成为sql的一部分,而不是字符串参数。

或者查找在线提供的众多SPLIT()功能之一。这是我推荐的那个。然后你可以做类似的事情......

WHERE
  RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department))

甚至更好,加入SPLIT()函数的结果......

  yourTable AS G
INNER JOIN
  dbo.split(@department) AS department
    ON  RTRIM(G.DeptName) = department.item

答案 1 :(得分:0)

正如Dems所说,你需要一个连接函数。

你可以使用http://blog.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

中的那个

休息一切都没问题

WHERE
  RTRIM(G.DeptName) IN (SELECT * FROM dbo.split(@Department)) 

而不是(RTRIM(G.DeptName) IN (@Department))

应该有用。