Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Auswählen und Sortieren von Spalten, die nicht in der Groupy By SQL-Anweisung enthalten sind - Oracle

Es ist nicht sinnvoll, Spalten einzuschließen, die nicht Teil der GROUP BY-Klausel sind. Überlegen Sie, ob Sie ein MIN(X), MAX(Y) in der SELECT-Klausel haben, aus welcher Zeile sollten andere Spalten (nicht gruppiert) stammen?

Wenn Ihre Oracle-Version aktuell genug ist, können Sie SUM - OVER() verwenden, um die SUM (gruppiert) für jede Datenzeile anzuzeigen.

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

Alternativ müssen Sie aus der Site ein Aggregat erstellen , Desk Spalten

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