我有一份SSRS报告,根据项目I(项目)或A(附件)过滤项目。目前这是多选参数,我指定了这些值。但我想将其更改为具有以下值的单个可选值:
是否可以在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类。
答案 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)