Oracle
 sql >> Database >  >> RDS >> Oracle

Come selezionare e ordinare per colonne non nell'istruzione Groupy By SQL - Oracle

Non ha senso includere colonne che non fanno parte della clausola GROUP BY. Considera se hai un MIN(X), MAX(Y) nella clausola SELECT, da quale riga dovrebbero provenire le altre colonne (non raggruppate)?

Se la tua versione di Oracle è abbastanza recente, puoi utilizzare SUM - OVER() per mostrare il SUM (raggruppato) su ogni riga di dati.

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

In alternativa, devi creare un aggregato dal Site , Desk colonne

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