要在where子句SSRS中过滤的参数

时间:2014-12-03 21:32:19

标签: sql sql-server sql-server-2008 reporting-services

我有一份SSRS报告,根据项目I(项目)或A(附件)过滤项目。目前这是多选参数,我指定了这些值。但我想将其更改为具有以下值的单个可选值:

  • 所有物品和配件
  • I - 物品
  • A - 配饰
  • E - 项目不包括A类和产品D

是否可以在where子句中包含case条件语句,如下所示:

WHERE 
(CASE WHEN @Pram1 IN ('A') THEN ('I,'A')
      WHEN @Pram1 IN ('I') THEN ('I')
      WHEN @Pram1 IN ('E') THEN ('I')
 ELSE 
 -1 END)

然后基于此,我将拥有类别的条件。 如果它是'A'则它将包括所有类别。 IF'E'则来自category参数,它也是一个多选但不包括A类。

1 个答案:

答案 0 :(得分:1)

您不能只在OP中列出case语句。但是,您可以使用以下模式有条件地应用SQL过滤器:

SELECT * 
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)