我正在使用SQL Server Reporting Services制作一些报告。 我有一些报告,其中过滤器是可选的。
例如..想象一下,你有一本书的报告。最终用户可以选择指定(或过滤)无,一个或多个作者。
我不相信我可以在我的查询中加入IF {}语句吗?
如果在SQL Server Reporting Services中有建议或最佳方法吗? 谢谢!
答案 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)
在没有看到您编写的整个过程的情况下很难分辨,但您可以使用语句WHERE
在IN
子句中包含多个值,
例如:
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
)