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

我有以下声明: SELECT IMPORTID,Region,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONALFrom PositionsWhere ID = :importIDGROUP BY IMPORTID,RefObligorOrder BY IMPORTID,RefObligor 表格中存在一些额外的列,我想作为“显示数据”的输出,但我不希望在group

我有以下声明:

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

关于作者: dawei

【声明】:石家庄站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐