2013-10-07 18 views
1

我試圖運行下面的查詢計數與轉診病人醫生的最後6個月內的號:的Oracle SQL不是一組被表達,而計數

SELECT 
    count(local_doc.providerno) NumberofReferals, 
    LOCAL_DOC.FULLNAME FULLNAME, 
    LOCAL_DOC.TELNUMBER TELNUMBER, 
    LOCAL_DOC.STREET STREET, 
    LOCAL_DOC.SUBURB SUBURB, 
    LOCAL_DOC.STATE STATE, 
    LOCAL_DOC.POSTCODE POSTCODE, 
    LOCAL_DOC.PROVIDERNO 
FROM 
    LOCAL_DOC, 
    PATIENT 
WHERE 
    PATIENT.PROVIDERNO = LOCAL_DOC.PROVIDERNO AND PATIENT.REFERALDATE <= sysdate AND PATIENT.REFERALDATE >= ADD_MONTHS(sysdate, -6) 
    group by local_doc.providerno; 

我不斷收到

ORA-00979: not a GROUP BY expression 
00979. 00000 - "not a GROUP BY expression" 
*Cause:  
*Action: 
Error at Line: 3 Column: 5 

並不知道如何解決這個問題。我怎麼能這樣做?

回答

3

Dear, group By Clause ask a user to specify all Select Columns in Group By Clause as well except select columns with aggregated functions.

Look in my Group by Clause i have specify all columns in Select except local_doc.providerno because it is using Aggregated function COUNT

爲了更好的理解,請參閱本link

SELECT 
    count(local_doc.providerno) NumberofReferals, 
    LOCAL_DOC.FULLNAME FULLNAME, 
    LOCAL_DOC.TELNUMBER TELNUMBER, 
    LOCAL_DOC.STREET STREET, 
    LOCAL_DOC.SUBURB SUBURB, 
    LOCAL_DOC.STATE STATE, 
    LOCAL_DOC.POSTCODE POSTCODE, 
    LOCAL_DOC.PROVIDERNO 
FROM 
    LOCAL_DOC, 
    PATIENT 
WHERE 
    PATIENT.PROVIDERNO = LOCAL_DOC.PROVIDERNO AND PATIENT.REFERALDATE <= sysdate AND PATIENT.REFERALDATE >= ADD_MONTHS(sysdate, -6) 
GROUP BY 
    LOCAL_DOC.FULLNAME , 
    LOCAL_DOC.TELNUMBER , 
    LOCAL_DOC.STREET , 
    LOCAL_DOC.SUBURB , 
    LOCAL_DOC.STATE , 
    LOCAL_DOC.POSTCODE , 
    LOCAL_DOC.PROVIDERNO 
+0

我試着這樣做和Oracle提供了以下錯誤:'ORA-00933:SQL命令不能正確地結束 00933. 00000 - 「SQL命令不能正確地結束」 *原因: *操作: 錯誤在行:15列:33' – Pindo

+2

@Pindo對不起別名從group by子句中刪除,請現在檢查,謝謝 –

0

添加

GROUP BY 
    LOCAL_DOC.FULLNAME , 
    LOCAL_DOC.TELNUMBER , 
    LOCAL_DOC.STREET , 
    LOCAL_DOC.SUBURB , 
    LOCAL_DOC.STATE , 
    LOCAL_DOC.POSTCODE , 
    LOCAL_DOC.PROVIDERNO 

大多數DBS MySQL之外會要求你組上剩餘的選定列

0

在你必須知道哪些列可以得到重複值的行和然後將其添加到您的group by查詢是:

SELECT 
count(local_doc.providerno) NumberofReferals, 
LOCAL_DOC.FULLNAME FULLNAME, 
LOCAL_DOC.TELNUMBER TELNUMBER, 
LOCAL_DOC.STREET STREET, 
LOCAL_DOC.SUBURB SUBURB, 
LOCAL_DOC.STATE STATE, 
LOCAL_DOC.POSTCODE POSTCODE, 
LOCAL_DOC.PROVIDERNO 
FROM 
LOCAL_DOC, 
PATIENT 
WHERE 
PATIENT.PROVIDERNO = LOCAL_DOC.PROVIDERNO AND PATIENT.REFERALDATE <= sysdate AND PATIENT.REFERALDATE >= ADD_MONTHS(sysdate, -6) 
group by 
LOCAL_DOC.FULLNAME, 
LOCAL_DOC.TELNUMBER, 
LOCAL_DOC.STREET, 
LOCAL_DOC.SUBURB, 
LOCAL_DOC.STATE, 
LOCAL_DOC.POSTCODE, 
LOCAL_DOC.PROVIDERNO;