报表生成器查询文本编辑器,在其中将小括号括起来

时间:2019-01-16 18:17:43

标签: sql where-clause parentheses reportbuilder

我的雇主更换了数据系统和报告工具。我们以前将Report Builder与建立良好的数据模型一起使用,这使我能够轻松进行一些复杂的过滤。然后,我们使用了Business Objects,尽管我不太喜欢它,但它也让我进行了一些复杂的过滤。现在我们回到报表生成器,但是数据模型有所不同,而且我似乎只能执行的过滤操作是一串AND运算符。

(注意:我对Report Builder和Business Object都是自学的。我对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新手吗?

1 个答案:

答案 0 :(得分:0)

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

gawk -F'|' '{print gensub( /^(.{8}).*/, "\\1", "1",$5)}' data 
20190110
20190110
20190110
20190110

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