【发布时间】:2021-09-12 00:09:33
【问题描述】:
SELECT *
FROM (SELECT a.ID,
SUM (A.AMT) AS AMT,
RANK ()
OVER (PARTITION BY a.ID ORDER BY b.NO DESC)
AS rnk
FROM TBL1 A
JOIN TBL2 B
ON a.ID = b.ID AND b.DATE <= a.DATE
WHERE b.CD = 'AB'
AND a.DESC = 'P'
AND a.TYP_DESC = 'SEC'
AND a.actg_prd_id between (TO_CHAR(ADD_MONTHS(TO_DATE('&&DATE','YYMM'),-2),'YYMM')) and '&&DATE'
group by a.ID
) a
WHERE a.rnk = 1
有人可以帮我解决这个问题吗?当我在没有“SUM”的情况下运行它时,查询工作正常,但是一旦我尝试对 AMT 字段求和,我的 group by 表达式就无法正常工作,并且我不断收到错误“ORA-00979: not a GROUP BY expression ”。
【问题讨论】:
-
您在 SELECT 中使用
b.NO,但在 GROUP BY 中未按b.NO分组。根据您的目标,从 SELECT 中删除b.NO或添加到 GROUP BY。 -
请说明您想要完成的任务。样本数据、期望的结果和清晰的解释都会有所帮助。
-
@MTO,我实际上是在特定时间段内引入一组人口。 RNK 在那里是为了删除重复记录。我只是用 where 子句中的所有表达式推导总体,并为总体中的每条记录提取 AMT 值。我可以轻松搞定,问题是当我尝试总结 AMT 时,Group by 无法正常工作。
-
为什么你认为你会有重复的值?如果您想在聚合之前 忽略重复项,则需要先过滤,然后再聚合。如果您想在 聚合之后忽略重复项,则无需担心,因为您不会有任何重复项。