sql >> Base de Datos >  >> RDS >> Oracle

Cómo seleccionar y ordenar por columnas que no están en la instrucción Groupy By SQL - Oracle

No tiene sentido incluir columnas que no forman parte de la cláusula GROUP BY. Considere si tiene un MIN(X), MAX(Y) en la cláusula SELECT, ¿de qué fila deben provenir otras columnas (no agrupadas)?

Si su versión de Oracle es lo suficientemente reciente, puede usar SUM - OVER() para mostrar la SUMA (agrupada) contra cada fila de datos.

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, debe hacer un agregado del Site , Desk columnas

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