Percentile_Cont函数抛出错误

时间:2016-06-08 04:27:06

标签: oracle oracle11g

我有这个查询,我试图在PERCENTILE_CONT中引入非静态值:

SELECT perf2.REVIEW_PERIOD
     , PERCENTILE_CONT(goalsASP.GOAL*.01) WITHIN GROUP (ORDER BY AVG_AMT ASC) ast75 
FROM repDB.TBL_PERFORMANCE perf2 JOIN
      pz.CATEGORY C on perf2.DEPTCAT = C.id JOIN
      repDB.TBL_GOALS_MATRIX goalsASP ON C.NAME = goalsASP.DIMENSION_Y
                                       and perf2.REVIEW_PERIOD = goalsASP.SNAP_NAME 
                                       and goalsASP.DIMENSION_X = 'asp'
GROUP BY perf2.REVIEW_PERIOD

抛出的错误是:

ORA-30497: Argument should be a constant or a function of expressions in GROUP BY. 30497. 00000 - "Argument should be a constant or a function of expressions in GROUP BY."

在一个视图中,当goalsASP.GOAL*.01.75并且我有一个存储过程,其中作为参数提供列时,它工作得很好,所以我有点不知所措因为我在这里做错了。

1 个答案:

答案 0 :(得分:0)

知道了。它不是Percentile_Cont的问题,而是正确分组的问题。

要解决我已隔离goalsASP.GOAL

的问题
SELECT perf2.REVIEW_PERIOD
     , goalsASP.GOAL
FROM repDB.TBL_PERFORMANCE perf2 JOIN
      pz.CATEGORY C on perf2.DEPTCAT = C.id JOIN
      repDB.TBL_GOALS_MATRIX goalsASP ON C.NAME = goalsASP.DIMENSION_Y
                                       and perf2.REVIEW_PERIOD = goalsASP.SNAP_NAME 
                                       and goalsASP.DIMENSION_X = 'asp'
GROUP BY perf2.REVIEW_PERIOD

然后我很明显需要按goalsASP.GOAL进行分组。

那么,答案是:

SELECT perf2.REVIEW_PERIOD
     , PERCENTILE_CONT(goalsASP.GOAL*.01) WITHIN GROUP (ORDER BY AVG_AMT ASC) ast75 
FROM repDB.TBL_PERFORMANCE perf2 JOIN
      pz.CATEGORY C on perf2.DEPTCAT = C.id JOIN
      repDB.TBL_GOALS_MATRIX goalsASP ON C.NAME = goalsASP.DIMENSION_Y
                                       and perf2.REVIEW_PERIOD = goalsASP.SNAP_NAME 
                                       and goalsASP.DIMENSION_X = 'asp'
GROUP BY perf2.REVIEW_PERIOD,
         goalsASP.GOAL

有点令人尴尬,我之前没有看到过,但疲惫的眼睛想念这些东西。