2014-12-11 28 views
0

我正在嘗試使用一個非常簡單的查詢來選擇ID號,名稱,2個日期,這些日期之間的日期以及視圖中幾項成本的總和。Oracle SQL - 不是GROUP BY函數

但是無論我如何鼓搗它,我所得到的都是這個錯誤。

我知道我不是那種過分熱情,但我真的不知道怎麼回事錯了(我有點真新本)。在此先感謝,代碼如下。

SELECT vw.RESERVATION_NUMBER AS "Reservation Number" 
     , owner.OWNER_FIRST_NAME || ', ' || owner.OWNER_LAST_NAME AS "Owner Name" 
     , vw.RESERVATION_START_DATE AS "Start Date" 
     , vw.RESERVATION_END_DATE AS "End Date" 
     , vw.RESERVATION_END_DATE - vw.RESERVATION_START_DATE AS "Number of Days" 
     , SUM(vw.DAILY_RATE) AS "Invoice Total" 
FROM HVK_RESERVATION_CHARGES_VW vw, HVK_OWNER owner 
WHERE owner.OWNER_NUMBER = vw.OWNER_NUMBER 
AND vw.RESERVATION_NUMBER = vw.RESERVATION_NUMBER 
GROUP BY vw.RESERVATION_NUMBER; 

回答

0

把所有的領域從group by子句中select聲明未包含在聚合:

... 
GROUP BY vw.RESERVATION_NUMBER, 
     owner.OWNER_FIRST_NAME || ', ' || owner.OWNER_LAST_NAME, 
     vw.RESERVATION_START_DATE, 
     vw.RESERVATION_END_DATE 
1

在Oracle(與大多數數據庫),你必須全部聚集沒有聚合函數列:

SELECT vw.RESERVATION_NUMBER AS "Reservation Number", 
     owner.OWNER_FIRST_NAME || ', ' || owner.OWNER_LAST_NAME AS "Owner Name", 
     vw.RESERVATION_START_DATE AS "Start Date", vw.RESERVATION_END_DATE AS "End Date", 
     (vw.RESERVATION_END_DATE - vw.RESERVATION_START_DATE) AS "Number of Days", 
     SUM(vw.DAILY_RATE) AS "Invoice Total" 
FROM HVK_RESERVATION_CHARGES_VW vw JOIN 
    HVK_OWNER owner 
    ON owner.OWNER_NUMBER = vw.OWNER_NUMBER AND vw.RESERVATION_NUMBER = vw.RESERVATION_NUMBER 
GROUP BY vw.RESERVATION_NUMBER, owner.OWNER_FIRST_NAME || ', ' || owner.OWNER_LAST_NAME, 
     vw.RESERVATION_START_DATE, vw.RESERVATION_END_DATE; 

然而,由於所有的聚集列,我不是很確定聚集甚至不需要爲此QUER年。

0

其他人已經識別出導致編譯失敗的語法錯誤。所以我會指出你的代碼中的邏輯失敗:你寫的東西並不計算停留的成本。你需要通過每天的房費乘以天數:

(vw.RESERVATION_END_DATE - vw.RESERVATION_START_DATE) 
       * vw.DAILY_RATE AS "Invoice Total" 

這意味着你不需要SUM(),所以你可以用GROUP完全免除BY子句。