Платёжный документ. Подитоги

По таблице из предыдущего примера написать запрос, который выведет данные общей суммой за каждый месяц по типам документов с итогами по каждому типу и общим итогом.

Вариант запроса:

SELECT pd.pay_type, pd.month_year AS mon, SUM(pay_sum) AS sm
  FROM (SELECT pd.pay_type,
               to_char(pd.pay_date, 'mm.yyyy') AS month_year,
               pd.pay_sum
          FROM payment_document pd) pd
 GROUP BY ROLLUP(pd.pay_type, pd.month_year);
/

SELECT pd.pay_type,
       to_char(pd.pay_date, 'MM.YYYY') AS mon,
       SUM(pd.pay_sum) AS sm
  FROM payment_document pd
 GROUP BY CUBE(pd.pay_type, to_char(pd.pay_date, 'MM.YYYY'))
HAVING grouping_id(pd.pay_type, to_char(pd.pay_date, 'MM.YYYY')) <> 2
 ORDER BY pd.pay_type ASC;
/

Результат:

PAY_TYPE	MON		SM
1		01.2012	600
1		02.2012	900
1				1500
2		01.2012	600
2		02.2012	700
2		04.2012	800
2		05.2012	900
2		06.2012	1000
2				4000
3		01.2012	1100
3		03.2012	1200
3		05.2012	2700
3		06.2012	1500
3				6500
				12000

P.S.
Конфигурация СУБД — Oracle Database 11g Express Edition Release 11.2.0.2.0
IDE — PL/SQL Developer Version 11.0.6.1776

Tags: ,

Comments are closed.