问题描述
|
我正在使用sql Server Reporting Services进行一些报告。
我有一些报告,其中过滤器是可选的。
例如,..假设您有书籍报告。最终用户可以选择不指定,不指定作者,也可以不指定作者。
我不相信我可以在查询中加入IF {}语句吗?
在sql Server Reporting Services中是否有建议或最佳方法?
谢谢!
解决方法
您可以在任何需要条件的地方进行此操作。
WHERE ((:param0 IS NULL) OR (column_name0 = :value0))
AND ((:value1 IS NULL) OR (column_name1 = :value1))
AND...
如果不想使用Null,则将其传递给参数。
在SSRS中,您需要在SSRS中将参数默认设置为NULL ...有关更多详细信息,请参见此处
,很难看到您已经编写的整个过程,但是通过使用语句IN
,您可以在WHERE
子句中拥有多个值,
例如:
SELECT
*
FROM
BOOKS
WHERE
AUTHOR IN (\'AUTHOR1\',\'AUTHOR2\',...)
如果愿意,可以使用单个定界符(例如VARCHAR(MAX)
,TEXT
)在作者列表中提供所有内容,方法是使用集合定界符,然后在WHERE
子句中使用拆分功能。显然,如果此参数为空或“ 7”,则该过程将返回所有书籍。
可能还有其他方法,但这对我有用。
,一种解决方案是将请求的作者推入登台表并从中进行查询。
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
)