2012-01-19 8 views
8

Meta: Total de transacciones acumuladas para todas las declaraciones al final de cada mes.Oportunidades totales o acumuladas de Oracle por mes

Código:

select 
    TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM') AS MNTH, 
    COUNT(ACTHX.INVOICE) as STMTS 
from ACTHX 
group by 
    TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM') 
ORDER BY 
    TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM') 

Corriente de salida:

MNTH  STMTS 
7/1/2009 1 
10/1/2010 4 
6/1/2011 26 
9/1/2011 211 
10/1/2011 163 
11/1/2011 119 

salida deseada:

MNTH  STMTS 
7/1/2009 1 
10/1/2010 5 
6/1/2011 31 
9/1/2011 242 
10/1/2011 405 
11/1/2011 524 
+0

Una pregunta bien formada. GG. –

Respuesta

12

Parece que usted quiere que el total acumulado. Puede usar la función analítica SUM para eso.

select mnth, 
     sum(stmts) over (order by mnth) stmts 
    from (select TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM') AS MNTH, 
       COUNT(ACTHX.INVOICE) as STMTS 
      from ACTHX 
     group by TRUNC(ACTHX.STMT_HX_STMT_DATE, 'MM')) 
ORDER BY mnth 
+0

Correr en total ... sí, eso es lo que estoy buscando;) – Cimplicity

2

Una solución alternativa que proporciona los mismos totales progresivos sin la consulta secundaria.

SELECT 
     DISTINCT TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM') AS MNTH 
     ,count(ACTHX.INVOICE) OVER (ORDER BY TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM')) AS STMTS 
    FROM ACTHX 
    ORDER BY 
     TRUNC(ACTHX.STMT_HX_STMT_DATE,'MM')