Сводные или промежуточные итоги по месяцам - PullRequest
8 голосов
/ 19 января 2012

Цель: скользящая / промежуточная сумма для всех выписок на конец каждого месяца.

Код:

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

Токовый выход:

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

Желаемый вывод:

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

Ответы [ 2 ]

12 голосов
/ 19 января 2012

Звучит так, будто вы хотите подвести итоги.Для этого вы можете использовать аналитическую функцию SUM.

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
2 голосов
/ 09 февраля 2012

Альтернативное решение, которое предоставляет те же скользящие итоги без подзапроса.

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...