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