【问题标题】:Count with unions与工会一起计数
【发布时间】:2016-07-01 07:56:08
【问题描述】:

使用此代码:

SELECT COUNT (*) FROM pcpedc WHERE pcpedc.numped IN (
  SELECT numped FROM pcpedc
  WHERE pcpedc.DATA = TO_DATE('15-MAR-2016','DD/MM/YYYY')
  AND pcpedc.hora < 16
  AND pcpedc.posicao = 'L'
  AND pcpedc.dtinicialcheckout IS NULL
  AND pcpedc.horalibera IS NULL

  UNION

  SELECT numped FROM pcpedc WHERE pcpedc.DATA < TO_DATE('15-MAR-2016','DD/MM/YYYY')
  AND pcpedc.posicao = 'L'
  AND pcpedc.dtinicialcheckout IS NULL

  UNION

  SELECT numped FROM pcpedc WHERE pcpedc.DATA = TO_DATE('15-MAR-2016','DD/MM/YYYY')
  AND pcpedc.hora < 16
  AND pcpedc.posicao = 'L'
  AND pcpedc.dtinicialcheckout IS NULL)

A 出现与括号相关的错误,如下所示:

14:45:58 ORA-00907: 缺少右括号

有什么建议吗?提前致谢。

【问题讨论】:

  • 您在哪个客户端运行它 - SQL*Plus?如果是,show sqlblanklines 报告了什么?
  • 如果你从 sqlplus 运行它,我猜你错过了一个 semi-colon 来终止你的语句
  • 这个查询显然没有问题。可能错误来自其他代码。
  • 看起来没什么问题,尽管它不一定会返回你想要的那些 TO_DATE('15-MAR-2016','DD/MM/YYYY') 语句,其中你有硬编码的 dd-使用 dd/mm/yyyy 格式化的 mon-yyyy 值!
  • 很好发现@Michael Broughton。一旦 OP 解决了最初的问题(可能通过删除空白行和/或添加分号),这将是他们获得的下一个 ORA 异常。

标签: sql oracle count union parentheses


【解决方案1】:

这不是答案,只是您可以简化查询的提示。 (您的第一个查询甚至会检索您最后一个查询的子集。)

select count(distinct numped)
from pcpedc
where posicao = 'L'
and dtinicialcheckout is null
and
(
  (data = date'2016-03-15' and hora < 16 and horalibera is null)
  or 
   data < date'2016-03-15'
);

【讨论】:

  • 就是这样!非常感谢。下次我会尽量简化(我是 SQL 语言的初学者,你提示非常有用)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
  • 2016-11-17
相关资源
最近更新 更多