在SSRS中使用IN语句进行查询

时间:2018-12-11 11:05:27

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

在我正在建立的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语句中?

1 个答案:

答案 0 :(得分:2)

根据您的示例,我会这样处理...

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

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')