2012-06-09 54 views
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 

我正在爲上面的sql丟失右括號錯誤。使用這個SQL我能夠得到的月份期間的結果,並試圖修改此結果爲過去24個月月,任何建議請。右括號缺失ora-00907

+3

請你可以設置你的代碼格式,讓人們更容易閱讀。請相信我先做這件事,然後看看你能否找到缺失的) –

+3

GROUPBY和ORDERBY? – Samson

回答

1

問題似乎錯位報價BETWEEN'

BETWEEN' 01-FEB-12' AND '29-FEB-12' 
4
  1. 你需要的話GROUPBY之間在GROUP BY子句和字詞的ORDER BY條款ORDERBY的空間。

  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' 
    
+0

親愛的賈斯汀,非常感謝你的支持,現在我想分解這個報告來顯示逐月計數。目前,我可以在任何給定日期得到總數,現在我正在嘗試對任何給定日期進行數月計數。您的建議非常感謝。 – user1445761

2

有兩個原因的ORA-00907異常。

第一個是,平凡地說,有一個左側的缺陷 - ( - 沒有配對的右括號 - )。這些可能很難通過手工進行診斷,尤其是在大型的SQL語句中,但是如果您擁有帶支架匹配功能的像樣的IDE,則很容易。

第二個原因是包含括號的SQL語句中的語法錯誤。如果我們錯誤地輸入了關鍵字,Oracle會將其視爲對象名稱。這會導致它在the 00900 to 01499 range中引發許多錯誤,如ORA-00905,ORA-00936和其他許多錯誤。 ORA-00907就是其中之一。同樣,一個體面的IDE在這裏會有所幫助:語法突出顯示可以幫助我們識別拼寫錯誤,因爲未能突出顯示我們拼寫錯誤的關鍵字。

在你的特殊情況下,你可能將GROUP BY壓縮成一個單詞可能是罪魁禍首。您還需要修復ORDER BY