【问题标题】:Using an IN statement for query in SSRS在 SSRS 中使用 IN 语句进行查询
【发布时间】:2018-12-11 11:05:26
【问题描述】:

在我正在构建的 SSRS 报告中,我有如下查询:

SELECT ID, Name
FROM TableA
WHERE Name IN (@name)

然后在 SSRS 中,我将参数可用值设置为“从查询中获取值”,值字段将如下所示:

'A','B','C'
'D','E','F'
'G','H','I'

标签字段是这样的:

Label A
Label B
Label C

当我运行查询时

SELECT ID, Name
FROM TableA,
WHERE Name IN ('A','B','C')

在 SQL Management Studio 中返回了正确的结果,但是,报告没有返回任何内容。如何在 IN 语句中获取格式正确的值?

【问题讨论】:

  • 在你的最后一个例子中,你的参数列表中的 A、B 和 C 是单独的项目吗?参数是多值参数吗?
  • A, B and C are separate items in the parameter list, but all values are to be used in the query when Label A is chosen
  • 您可以发布报告参数屏幕的屏幕截图吗?如果将 where 子句更改为 WHERE Name = @name,会发生什么?在报告参数屏幕上的“常规”部分是否有勾选“允许多个值”?
  • 您必须在 sql 端创建一个拆分函数,该函数将采用“,”分隔值。并且您的代码将起作用。例如:将类似于... WHERE Name IN (select item from dbo.fn_split @name) 。显然不会给你写函数。
  • @BobF 如果他允许多个值,它们将以 'A,B,C' 而不是 'A', 'B', 'C' 的形式出现;所以 op 的 in 子句不起作用。

标签: reporting-services ssrs-2008 ssrs-2008-r2


【解决方案1】:

根据你的例子,我会这样处理......

创建一个包含标签和值的表或视图,例如

myTable:
    myCaption   MyValue
    'Label A'   'A'
    'Label A'   'B'
    'Label A'   'C'
    'Label B'   'D'
    'Label B'   'E'
    'Label B'   'F'
    'Label C'   'G'
    'Label C'   'H'
    'Label C'   'I'

对于您的第一个参数 (@myLabel),数据集将是

SELECT DISTINCT myCaption FROM myTable ORDER BY myCaption

您的第二个参数 (@myValues)(假设您希望用户能够从值中进行选择)将是

SELECT myValue FROM myTable WHERE myLabel = @myLabel

您需要将参数设为多值并将可用值设置为第二个数据集,您可以选择将默认值设置为同一数据集。

在您的主报表数据集中,查询就像您的示例

SELECT * FROM myDataTable WHERE myColumn IN (@myValues)

只要上面直接在数据集查询中(换句话说,您没有使用存储过程),那么这将按预期工作。 SSRS 会自动将您的多值参数转换为逗号分隔的列表并将其注入您的数据集查询,因此发送到服务器的实际查询将是 SELECT * FROM myDataTable WHERE myColumn IN ('A', 'B', 'C')

【讨论】:

  • 作为 op 没有建议 SP 或查询路由工作,并且根据 Alan 的建议,这将工作直接查询路由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-26
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多