我有以下声明:
SELECT IMPORTID,Region,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONAL From Positions Where ID = :importID GROUP BY IMPORTID,RefObligor Order BY IMPORTID,RefObligor
表格中存在一些额外的列,我想作为“显示数据”的输出,但我不希望在group by语句中.
这些是Site,Desk
最终输出将包含以下列:
IMPORTID,Site,Desk,SUM(NOTIONAL) AS SUM_NOTIONAL
理想情况下,我希望数据排序如下:
Order BY IMPORTID,RefObligor
怎么做到这一点?
解决方法
包含不属于GROUP BY子句的列是没有意义的.考虑一下SELECT子句中是否有MIN(X),MAX(Y),其他列(未分组)应该来自哪一行?
如果您的Oracle版本足够新,则可以使用SUM-OVER()来显示针对每个数据行的SUM(分组).
SELECT IMPORTID,SUM(NOTIONAL) OVER(PARTITION BY IMPORTID,RefObligor) AS SUM_NOTIONAL From Positions Where ID = :importID Order BY IMPORTID,RefObligor
或者,您需要从Site,Desk列中进行聚合
SELECT IMPORTID,Min(Site) Site,Min(Desk) Desk,Min(Site),Min(Desk),RefObligor