2014-01-27 160 views
0

我希望Oracle SQL專家能夠幫助解決這個問題。我有一個具有以下列的觀點:如何在使用Oracle SQL使用OVER(分區...)時計算總計總計

MONTH (DATE) 
JOB_GROUP (VARCHAR2) 
PEOPLE (NUMBER) 

我認爲目前看起來是這樣的:

SELECT 
DISTINCT JOB_GROUP, 
SUM(PEOPLE) OVER (PARTITION BY MONTH || JOB_GROUP) AS CURRENT_PEOPLE 
SUM(PEOPLE) OVER (PARTITION BY MONTH || JOB_GROUP)/'100' AS RATIO 
FROM MY_VIEW 
WHERE MONTH = '01-DEC-2013' 
ORDER BY RATIO DESC 

的「100」來自於翻出當月的我頂頁面上的隱藏項目Worker1,但對於這個例子,我只是使用'100'。 查詢的結果出現這樣的事情。

JOB_GROUP CURRENT_PEOPLE RATIO 
WORKER1  100  1.0 
WORKER2  80   0.8 
WORKER3  50   0.5 

我在尋找的GRAND總數是查詢結果底部的CURRENT PEOPLE AND RATIO。我將把它放入APEX Classic報告中。在這個例子中是230和2.3。由於我使用OVER(分區)方法,因此我無法使用任何種類的GROUP BY。

欣賞你可能have..thank你

+0

你不應該使用'(PARTITION BY MONTH || JOB_GROUP)'。對於其中的一種,您可能會進行隱式類型轉換,其次可能會因此產生錯誤的結果。直接使用這兩列:'(PARTITION BY MONTH,JOB_GROUP)'。不要使用字符串作爲數字''100''是一個字符串,而不是數字。除此之外,您還需要進行隱式數據類型轉換。您的情況'MONTH = '01 -DEC-2013''也*受到隱式數據類型轉換(並且只會在我的計算機上引發錯誤)。改用'to_date()'。 –

回答

1

你不需要解析函數的任何意見。你可以定期聚集做到這一點:

SELECT JOB_GROUP, 
     SUM(PEOPLE) AS CURRENT_PEOPLE 
     SUM(PEOPLE)/'100' AS RATIO 
FROM MY_VIEW 
WHERE MONTH = '01-DEC-2013' 
GROUP BY ROLLUP (OB_GROUP) 
ORDER BY RATIO DESC; 

不需要在group by的月份,因爲你選擇只用了一個月。

+0

完美!謝謝! – Ewaver