【问题标题】:Filtering by ALL or by selected attribute按 ALL 或按选定属性过滤
【发布时间】:2011-11-01 21:52:14
【问题描述】:

请原谅我的语言或 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。那么,当两个属性都为 null 并且仍然能够按每个或两个属性进行过滤时,我怎样才能使报告显示所有行?

我怎样才能做到这一点?

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

【问题讨论】:

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


    【解决方案1】:

    请注意,在 SQL 中,NULL = NULL 永远不会被评估为真。您可以将其视为 NULL 不是什么都不是,而是未指定。而且您无法比较两个未指定的值。如果列具有空值,则必须测试 COL1 IS NULL 才能为真。

    试试这个:

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

    【讨论】:

    • 程序有效,但由于某种原因,它没有显示在 RDL 设计的 Visual Studio 上。
    • 其实我修好了。非常感谢。
    • 不客气。请编辑您的问题并写下如果此线程中未提及某些问题,您是如何解决的:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-03
      • 2019-05-30
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多