0
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

I am getting missing right parenthesis error for the above sql. Using this sql I was able to get the result for the month period and tried to modify this to get result for last 24 months month by month any suggestions please.

4

3 回答 3

4
  1. 您需要在单词GROUP和从句中的单词和单词和从句中的单词之间BY留一个空格。GROUP BYORDERBYORDER BY

  2. 虽然它不会导致语法错误,但您几乎肯定不希望在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'
    
于 2012-06-09T05:13:46.097 回答
2

ORA-00907 异常有两个原因。

第一个是,平庸地,有一个左括号 - (- 没有伙伴右括号 - )。这些可能很难手动诊断,尤其是在大型 SQL 语句中,但如果您有一个不错的带有括号匹配功能的 IDE,那就很容易了。

第二个原因是包含括号的 SQL 语句中的语法错误。如果我们输入错误的关键字,Oracle 会将其视为对象名称。这可能会导致它抛出许多错误,例如 ORA-00905、ORA-00936 和00900 到 01499 范围内的许多其他错误。ORA-00907 就是其中之一。同样,一个体面的 IDE 在这里会有所帮助:语法突出显示可以帮助我们识别拼写错误,因为它不能突出显示我们拼错的关键字。

GROUP BY在您的特定情况下,您压缩成一个单词似乎很可能是罪魁祸首。您还需要修复ORDER BY.

于 2012-06-09T15:52:29.827 回答
1

问题似乎是放错了报价BETWEEN'

BETWEEN' 01-FEB-12' AND '29-FEB-12'
于 2012-06-09T05:09:16.270 回答