Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment sélectionner et classer par des colonnes qui ne sont pas dans l'instruction Groupy By SQL - Oracle

Cela n'a pas de sens d'inclure des colonnes qui ne font pas partie de la clause GROUP BY. Si vous avez un MIN(X), MAX(Y) dans la clause SELECT, de quelle ligne les autres colonnes (non groupées) doivent-elles provenir ?

Si votre version d'Oracle est assez récente, vous pouvez utiliser SUM - OVER() pour afficher la SOMME (groupée) sur chaque ligne de données.

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

Alternativement, vous devez créer un agrégat à partir du Site , Desk colonnes

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