Sql server Where子句中的多值条件参数-SSRS

Sql server Where子句中的多值条件参数-SSRS,sql-server,reporting-services,Sql Server,Reporting Services,我知道如何创建复合条件过滤器(参见下面的示例),其中,根据参数中的一个值,将应用相应的where语句(下面的示例)。但是,我如何制作下面的示例多值参数,即用户不必只选择一个选项,而是可以选择要选择的选项。我正在使用SSRS报表生成器和SQL Server 2016。非常感谢。 编辑:下面是关于StackOverflow的另一个问题的一个更好的例子: FROM yourProductsTable p WHERE --Apply the "type" filters (

我知道如何创建复合条件过滤器(参见下面的示例),其中,根据参数中的一个值,将应用相应的where语句(下面的示例)。但是,我如何制作下面的示例多值参数,即用户不必只选择一个选项,而是可以选择要选择的选项。我正在使用SSRS报表生成器和SQL Server 2016。非常感谢。 编辑:下面是关于StackOverflow的另一个问题的一个更好的例子:

FROM yourProductsTable p
WHERE 
--Apply the "type" filters
(
    (
        @TypeParam = 'All' --then include both Items and Accessories
        AND p.ProductType in ('I','A')
    )
    OR 
    (
        @TypeParam = 'A' --Accessories only
        AND p.ProductType = 'A'
    )
    OR
    (
        @TypeParam = 'I' --Items only
        AND p.ProductType = 'I'
    )
    OR
    (
        @TypeParam = 'E' --Items only, but Exclude Category A and Product D
        AND p.ProductType = 'I'
        AND p.Category <> 'A'
        AND p.Product <> 'D'
    )
)
--Apply Other filters: i.e. category
AND p.Category in (@SSRSCategoryMultiSelectParam)
来自您的产品稳定p
哪里
--应用“类型”过滤器
(
(
@TypeParam='All'--然后包括项目和附件
和p.ProductType in('I','A'))
)
或
(
@TypeParam='A'--仅限附件
p.ProductType='A'
)
或
(
@TypeParam='I'--仅限项目
p.ProductType='I'
)
或
(
@TypeParam='E'--仅项目,但不包括类别A和产品D
p.ProductType='I'
和p.“A”类
和p.产品“D”
)
)
--应用其他过滤器:即类别
以及(@SSRSCategoryMultiSelectParam)中的p.类别

假设yu直接在SSRS数据集中(而不是在存储过程中)执行此操作,并且您的参数值为'All','a','I'和'E',则

你应该可以改变这个

    @TypeParam = 'A' --Accessories only
    AND p.ProductType = 'A'
对此

    'A' IN (@TypeParam) --Accessories only
    AND p.ProductType = 'A'

对所有实例重复此操作,这将为您提供所需的内容。

在SSRS中,如果您使用多值参数和内联语句,则您将使用(@Parameter)中的列的格式
,SSRS将(安全地?)注入值。如果您使用的是过程,那么SSRS将传递一个带分隔符的字符串,您将需要使用字符串拆分器。谢谢Larnu,我知道行内语句,但我不能在这种上下文中使用它。请参见示例。如果参数有多个值,则不会选择任何条件…我希望有条件地使用WHERE子句中的参数值…查询中的所有内容都是
=
,这就是@ZigL的原因<代码>={Multi-Value-Parameter}
没有意义。@Larnu这不是我创建的一个很好的示例。很抱歉我不能使用in line语句的原因是因为在我的实际查询中,我在条件中预先选择了多个选项。对不起,这太尴尬了!我更新了一个更好的例子!