如何使用可选参数编​​写SQL Query?

时间:2011-04-12 21:15:11

标签: reporting-services

我正在使用SQL Server Reporting Services制作一些报告。 我有一些报告,其中过滤器是可选的。

例如..想象一下,你有一本书的报告。最终用户可以选择指定(或过滤)无,一个或多个作者。

我不相信我可以在我的查询中加入IF {}语句吗?

如果在SQL Server Reporting Services中有建议或最佳方法吗? 谢谢!

3 个答案:

答案 0 :(得分:4)

你可以在任何你想要的条件下做到这一点..

WHERE ((:param0 IS NULL) OR (column_name0 = :value0)) 
  AND ((:value1 IS NULL) OR (column_name1 = :value1)) 
  AND...

如果您不想使用它,请将Null传递给参数。

在SSRS中,您需要在SSRS默认情况下将参数设置为NULL ... see here for more detail

答案 1 :(得分:3)

在没有看到您编写的整个过程的情况下很难分辨,但您可以使用语句WHEREIN子句中包含多个值,

例如:

SELECT
    *
FROM
   BOOKS 
WHERE
   AUTHOR IN ('AUTHOR1', 'AUTHOR2', ...)

如果你喜欢使用set delimiter然后在{{1}中使用split函数,你可以在单个(类型为VARCHAR(MAX)TEXT)参数中提供作者列表中的所有内容}子句。显然,如果此参数为空或WHERE,则该过程将返回所有书籍。

可能还有其他方法,但这个方法适合我。

答案 2 :(得分:0)

一种解决方案是将请求的作者推送到临时表并从中进行查询。

Select ...
From books
Where Exists    (   
                Select 1
                From author_staging As S
                Where S.author = books.author
                )

如果没有选择作者,所需的行为是返回所有书籍,那么你可以这样做:

Select ...
From books
Where Exists    (   
                Select 1
                From author_staging As S
                Where S.author = books.author
                Union All
                Select 1
                From ( Select 1 As Value ) As Z
                Where Not Exists    (
                                    Select 1
                                    From author_staging As S1
                                    )
                )

或另一种形式:

Select ...
From books
Where Exists    (   
                Select 1
                From author_staging As S
                Where S.author = books.author
                )
    Or Not Exists   (
                    Select 1
                    From author_staging As S1
                    )