获取ORA-00937虽然选择列包含在GROUP By子句中

时间:2014-02-11 07:01:49

标签: oracle group-by

下面是我的SQL。我不知道还有什么办法可以不接收“不是单组组功能”错误。

SELECT PP.PENSIONERID,SUM(ROUND(EXP(SUM(LN(INFIDX)))*AMOUNT,2))AMOUNT
FROM AG_PEN_PARTS PP
JOIN LAG_INF_INDICES INF ON INF.INFYEAR>=EXTRACT(YEAR FROM PP.BEGDATE)
GROUP BY PP.PENSIONERID,PP.AMOUNT

我不能在GROUP BY子句中包含ROUND(EXP(SUM(LN(LN(INFIDX)))* AMOUNT,2),因为那里不允许组函数。有什么想法吗?

编辑:这是我的两张桌子:

LAG_INF_INDICES:  INFYEAR | INFIDX
                  ----------------
                    2010     1.079
                    2011     1.116
                    2012     1.011
                    2013     1.024

 AG_PEN_PARTS:      PENSIONERID | BEGDATE   | AMOUNT
                    ------------------------------
                        112      07/20/2013   120
                        113      01/10/2012   100
                        112      12/12/2010   90
                        114      03/05/2011   70

这是我期望获得的结果:

      PENSIONERID  |  AMOUNT
      ----------------------
            112      235.08
            113      103.53
            114      80.87

因此,例如,对于养老金领取者112,有两个记录。首先,我需要将从2010年开始乘以INFIDX值乘以90,再乘以从2013年开始的INFIDX值乘以120,然后得到这两个值的总和。

1 个答案:

答案 0 :(得分:1)

要使其正常工作,请使用第二个GROUP BY将第二个SUM移动到另一个SELECT:

SELECT PENSIONERID, SUM(AMOUNT) as AMOUNT FROM (
  SELECT PP.PENSIONERID, ROUND(EXP(SUM(LN(INFIDX)))*AMOUNT,2) AMOUNT
  FROM AG_PEN_PARTS PP
  JOIN LAG_INF_INDICES INF ON INF.INFYEAR>=EXTRACT(YEAR FROM PP.BEGDATE)
  GROUP BY PP.PENSIONERID, AMOUNT
) GROUP BY PENSIONERID

SQL Fiddle