2014-01-27 120 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