下面是我的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,然后得到这两个值的总和。
答案 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