Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como selecionar e ordenar por colunas não na instrução Groupy By SQL - Oracle


Não faz sentido incluir colunas que não fazem parte da cláusula GROUP BY. Considere se você tiver um MIN(X), MAX(Y) na cláusula SELECT, de qual linha as outras colunas (não agrupadas) devem vir?

Se sua versão do Oracle for recente o suficiente, você pode usar SUM - OVER() para mostrar o SUM (agrupado) em cada linha de dados.
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

Alternativamente, você precisa fazer um agregado do Site , Desk colunas
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