【问题标题】:Report Builder Query Text Editor Where Clause Parentheses报表生成器查询文本编辑器 Where 子句括号
【发布时间】:2019-01-16 18:17:43
【问题描述】:

我的雇主更换了数据系统和报告工具。我们曾经使用带有精心构建的数据模型的 Report Builder,它使我能够轻松地进行一些复杂的过滤。然后我们使用了Business Objects,虽然我不是很喜欢它,但它也让我可以做一些复杂的过滤。现在我们回到报表生成器,但数据模型不同,我似乎能够做的唯一过滤是一串 AND 运算符。

(注意:我在报表生成器和业务对象方面都是自学的。我对 SQL 编码语言本身的经验很少。此外,在此示例中实际数据标签已更改。)

我正在从大量数据中提取数据,因此我需要在查询级别进行过滤。我首先需要包含基于五个标准的数据,就像这样。

    | SYSTEM.REGION.REGION_STATUS_CODE = N'1'
    | SYSTEM.STATE.STATE_STATUS_CODE = N'1'
AND | SYSTEM.ORDERS.DISCARDED_DATE IS NULL
    | SYSTEM.SERVICE.SERVICE_DISCARDED_DATE IS NULL
    | SYSTEM.SERVICE.SERVICE_STATUS_CODE = N'01'

然后我需要包含适合两个配对之一的数据,就像这样。

   |     | SYSTEM.SERVICE.SERVICE_CONTRACT_CODE = N'Retail'
   | AND | SYSTEM.ORDERS.DISCOUNT_CODE = N'N/A'
OR | 
   |     | SYSTEM.SERVICE.SERVICE_CONTRACT_CODE = N'Wholesale'
   | AND | SYSTEM.ORDERS.DISCOUNT_CODE != N'N/A'

在我使用查询设计器构建查询并切换到文本模式后,它给了我这个。

WHERE
  SYSTEM.REGION.REGION_STATUS_CODE = N'1'
  AND SYSTEM.STATE.STATE_STATUS_CODE = N'1'
  AND SYSTEM.ORDERS.DISCARDED_DATE IS NULL
  AND SYSTEM.SERVICE.SERVICE_DISCARDED_DATE IS NULL
  AND SYSTEM.SERVICE.SERVICE_STATUS_CODE = N'01'
  AND SYSTEM.SERVICE.SERVICE_CONTRACT_CODE = N'Retail'
  AND SYSTEM.ORDERS.DISCOUNT_CODE = N'N/A'
  AND SYSTEM.SERVICE.SERVICE_CONTRACT_CODE = N'Wholesale'
  AND SYSTEM.ORDERS.DISCOUNT_CODE != N'N/A'

我试过把括号放进去,但我一定是做错了,因为查询运行了很长时间才基本上给了我整个数据库。

有人愿意帮助 SQL 新手吗?

【问题讨论】:

    标签: sql where-clause parentheses reportbuilder


    【解决方案1】:

    假设其他一切都是正确的,它应该只是应用括号来使逻辑正确。使用稍微夸张的空格来尝试清楚:

    WHERE
      SYSTEM.REGION.REGION_STATUS_CODE = N'1'
      AND SYSTEM.STATE.STATE_STATUS_CODE = N'1'
      AND SYSTEM.ORDERS.DISCARDED_DATE IS NULL
      AND SYSTEM.SERVICE.SERVICE_DISCARDED_DATE IS NULL
      AND SYSTEM.SERVICE.SERVICE_STATUS_CODE = N'01'
      AND (
            (SYSTEM.ORDERS.DISCOUNT_CODE = N'N/A'
             AND SYSTEM.SERVICE.SERVICE_CONTRACT_CODE = N'Retail')
           OR
            (SYSTEM.ORDERS.DISCOUNT_CODE != N'N/A'
             AND SYSTEM.SERVICE.SERVICE_CONTRACT_CODE = N'Wholesale')
          )
    

    (它仍然可能永远运行,但这更多是数据库大小和索引的一个因素。)

    【讨论】:

    • 看准了!该报告不仅可以像我现在希望的那样工作(并且相当快),而且我认为我还可以使用它来计算未来报告的其他复杂过滤。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    • 2021-08-16
    • 2013-12-09
    相关资源
    最近更新 更多