m3n*_*tat 2 sql oracle group-by sql-order-by
我有以下声明:
SELECT
IMPORTID,Region,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONAL
From
Positions
Where
ID = :importID
GROUP BY
IMPORTID, Region,RefObligor
Order BY
IMPORTID, Region,RefObligor
Run Code Online (Sandbox Code Playgroud)
表中存在一些额外的列Positions,我想作为"显示数据"的输出,但我不希望在group by语句中.
这些是 Site, Desk
最终输出将包含以下列:
IMPORTID,Region,Site,Desk,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONAL
Run Code Online (Sandbox Code Playgroud)
理想情况下,我希望数据排序如下:
Order BY
IMPORTID,Region,Site,Desk,RefObligor
Run Code Online (Sandbox Code Playgroud)
怎么做到这一点?
包含不属于GROUP BY子句的列是没有意义的.考虑一下SELECT子句中是否有MIN(X),MAX(Y),其他列(未分组)应该来自哪一行?
如果您的Oracle版本足够新,则可以使用SUM-OVER()来显示针对每个数据行的SUM(分组).
SELECT
IMPORTID,Site,Desk,Region,RefObligor,
SUM(NOTIONAL) OVER(PARTITION BY IMPORTID, Region,RefObligor) AS SUM_NOTIONAL
From
Positions
Where
ID = :importID
Order BY
IMPORTID,Region,Site,Desk,RefObligor
Run Code Online (Sandbox Code Playgroud)
另外,你需要做一个汇总出的Site,Desk列
SELECT
IMPORTID,Region,Min(Site) Site, Min(Desk) Desk,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONAL
From
Positions
Where
ID = :importID
GROUP BY
IMPORTID, Region,RefObligor
Order BY
IMPORTID, Region,Min(Site),Min(Desk),RefObligor
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18972 次 |
| 最近记录: |