在 SSRS 中使用 IN 语句进行查询
Using an IN statement for query in SSRS
在我正在构建的 SSRS 报告中,我有一个如下所示的查询:
SELECT ID, Name
FROM TableA
WHERE Name IN (@name)
然后在 SSRS 中,我将参数可用值设置为 'Get values from a query',值字段将如下所示:
'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 中返回了正确的结果,但是报告 returns 什么也没有。如何在 IN 语句中获取格式正确的值?
根据你的例子,我会这样处理...
创建一个 table 或包含您的标签和值的视图,例如
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')
在我正在构建的 SSRS 报告中,我有一个如下所示的查询:
SELECT ID, Name
FROM TableA
WHERE Name IN (@name)
然后在 SSRS 中,我将参数可用值设置为 'Get values from a query',值字段将如下所示:
'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 中返回了正确的结果,但是报告 returns 什么也没有。如何在 IN 语句中获取格式正确的值?
根据你的例子,我会这样处理...
创建一个 table 或包含您的标签和值的视图,例如
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')