SELECT * FROM (
SELECT
ORG_ROADMARK,
COUNT(DISTINCT EQUIP_INITIAL||EQUIP_NUM||move_dtm) AS Billing_Count
FROM CMD_BILLING_INFO
WHERE move_dtm BETWEEN' 01-FEB-12' AND '29-FEB-12'
AND (
(MOVE_TYPE_CD ='ICR' AND EQUIP_STATUS_CD IN ('L','W'))
OR
( MOVE_TYPE_CD ='RLO' AND EQUIP_STATUS_CD ='L' )
OR
( MOVE_TYPE_CD ='RMT' AND EQUIP_STATUS_CD ='W' )
) GROUPBY ORG_ROADMARK
) ORDERBY ORG_ROADMARK
上述sql缺少右括号错误。使用此sql,我能够获得该月的结果,并尝试对其进行修改以逐月获得过去24个月的结果,请提出任何建议。
-
GROUP BY
子句中的单词GROUP
和BY
以及ORDER BY
子句中的单词ORDER
和BY
之间需要一个空格。 -
虽然它不会导致语法错误,但您几乎肯定不希望在
BETWEEN
旁边使用单引号。 我强烈建议您也不要依赖隐式转换,因为具有不同 NLS 设置的人可能想要运行此代码。WHERE move_dtm BETWEEN to_date( '01-FEB-2012', 'DD-MON-YYYY' ) AND to_date( '29-FEB-2012', 'DD-MON-YYYY' )
或
WHERE move_dtm BETWEEN date '2012-02-01' AND date '2012-02-29'
ORA-00907 异常有两个原因。
首先,平庸地,有一个左偏执 - (
- 没有伴侣右括号 - )
. 这些可能很难手动诊断,尤其是在大型 SQL 语句中,但如果你有一个带有括号匹配功能的体面 IDE,那就很容易了。
第二个原因是包含括号的 SQL 语句中的语法错误。 如果我们输入错误关键字,Oracle 会将其视为对象名称。 这可能会导致它引发许多错误,例如 ORA-00905、ORA-00936 以及 00900 到 01499 范围内的许多其他错误。 ORA-00907就是其中之一。 同样,一个体面的IDE将在这里有所帮助:语法突出显示可以帮助我们识别拼写错误的关键字。
在你的特殊情况下,你把GROUP BY
压缩成一个词很可能是罪魁祸首。 您还需要修复ORDER BY
。
问题似乎是放错了引号BETWEEN'
BETWEEN' 01-FEB-12' AND '29-FEB-12'