按ALL或选定属性过滤

时间:2011-11-01 21:52:15

标签: sql-server visual-studio reporting-services

原谅我的语言或SQL /报告措辞

我正在使用Reporting Services生成报告,其中我有2个下拉列表,以便仅按期间和类别显示。我想要它,所以如果我选择并且我显示所有条目,如果从2个下拉中的任何一个中选择,则按这些选择进行过滤。我有一个存储过程,它在WHERE子句中声明了以下内容:

WHERE (dbo.PERIOD_LIST.PERIOD_DESC = @period) OR (dbo.CATEGORY.CATEGORY_DESC = @category)

但是我无法在Reporting Services / Visual Studio上使用它。我显示所有条目而不是过滤条目。我将@period和@category初始化为NULL。那么我该怎么做才能使报告显示所有行,当两个属性都为空并且仍然可以按它们中的每一个或两者进行过滤时?

我怎样才能做到这一点?

编辑:我使用了FilipPopović给我的建议。如果您遇到此问题,请修改您准备好的语句,并确保刷新数据集上的字段,因为您准备好的语句中还有其他条款!

2 个答案:

答案 0 :(得分:0)

作为条件的一部分检查参数是否为NULL:

WHERE ((@period IS NULL) OR (dbo.PERIOD_LIST.PERIOD_DESC = @period))
  AND ((@category IS NULL) OR (dbo.CATEGORY.CATEGORY_DESC = @category))

答案 1 :(得分:0)

请注意,在SQL中,NULL = NULL永远不会计算为true。你可以把它当作NULL而不是什么东西但是没有指定。而且您无法比较两个未指定的值。如果列具有空值,则必须测试COL1 IS NULL以获得true。

试试这个:

WHERE ((dbo.PERIOD_LIST.PERIOD_DESC = @period) OR (@period IS NULL))
AND ((dbo.CATEGORY.CATEGORY_DESC = @category) OR (@category IS NULL))