如何选择和排序不在Groupy中的列按SQL语句 - Oracle

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)

怎么做到这一点?

Ric*_*iwi 6

包含不属于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)