Tengo la siguiente statement:
SELECT IMPORTID,Region,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONAL From Positions Where ID = :importID GROUP BY IMPORTID, Region,RefObligor Order BY IMPORTID, Region,RefObligor
Existen algunas columnas adicionales en las Positions
tabla que quiero como salida para "mostrar datos" pero no quiero en el grupo por statement.
Estos son Site, Desk
El resultado final tendría las siguientes columnas:
IMPORTID,Region,Site,Desk,RefObligor,SUM(NOTIONAL) AS SUM_NOTIONAL
Idealmente, me gustaría que los datos se clasificaran como:
Order BY IMPORTID,Region,Site,Desk,RefObligor
¿Cómo lograr esto?
No tiene sentido include 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 provienen otras columnas (no agrupadas)?
Si su versión de Oracle es lo suficientemente reciente, puede usar SUMAVERA () para mostrar la SUMA (agrupada) en 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, necesita hacer un agregado del Site
, columnas de Desk
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
Yo creo que esto es
select IMPORTID, Region, Site, Desk, RefObligor, Sum(Sum(Notional)) over (partition by IMPORTID, Region, RefObligor) from Positions group by IMPORTID, Region, Site, Desk, RefObligor order by IMPORTID, Region, RefObligor, Site, Desk;
… pero es difícil de decir sin más información y / o datos de testing.