2012-01-19 13 views
8

Obiettivo: totale in rotazione/in esecuzione per tutte le dichiarazioni alla fine di ogni mese.Totali Oracle in rotazione o in esecuzione per mese

Codice:

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') 

Corrente di uscita:

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 

output desiderato:

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 domanda ben formata. GG. –

risposta

12

suona come si desidera che il totale corrente. È possibile utilizzare la funzione di analisi SUM per quello.

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

Correre totale ... sì, questo è quello che sto cercando;) – Cimplicity

2

Una soluzione alternativa che fornisce gli stessi totali di rotolamento senza la query secondaria.

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')