Как добавить промежуточный итог и итог в оракуле - PullRequest
0 голосов
/ 09 апреля 2019

Я хочу добавить итог и промежуточный итог к результату в Oracle

SELECT b.org_id  "Org ID", a.org_nm  "Org Name", b.trans_cd  "Transaction", TO_CHAR(b.creat_ts,'mm/dd/yyyy') "Date", b.trans_am "Amount"
FROM adrs a, advrg_fee b 
WHERE  a.org_id = b.org_id AND to_char(b.creat_ts,'yyyy') = 2019 AND to_char(b.creat_ts,'mm') = 04;

Результат похож на

Org ID  Org Name  Transaction    Date        Amount

  11       AA        T1         2018-4-11     100
  11       AA        T1         2018-5-11     200
  22       BB        T2         2017-9-7      200
  22       BB        T4         2018-9-11     100

Теперь я хочу добавить промежуточный итог и итог к результату.

Org ID  Org Name  Transaction    Date        Amount

  11       AA        T1         2018-4-11     100
  11       AA        T1         2018-5-11     200
  AA_subtotal                                 300
  22       BB        T2         2017-9-7      200
  22       BB        T4         2018-9-11     100
  BB_subtotal                                 300
  Total                                       600

Как я могу это сделать?Я пробовал функцию как свертка, но не уверен, как ее использовать.Любое предложение для Как изменить запрос?Спасибо!

1 Ответ

1 голос
/ 09 апреля 2019

Вы можете использовать GROUPING SETS:

SELECT af.org_id as "Org ID", a.org_nm as "Org Name",
       af.trans_cd as "Transaction",
       TO_CHAR(af.creat_ts, 'mm/dd/yyyy') as "Date",
       SUM(af.trans_am) as "Amount"
FROM adrs a JOIN
     advrg_fee af
     ON  a.org_id = af.org_id 
WHERE af.creat_ts >= DATE '2019-04-01' AND af.creat_ts < DATE '2019-05-01'
GROUP BY GROUPING SETS ( (af.org_id, a.org_nm, af.trans_cd, TO_CHAR(af.creat_ts, 'mm/dd/yyyy') ), (a.org_nm), () );

Обратите внимание на изменения, которые я внес в запрос:

  • При этом используется правильный, явный стандарт JOIN синтаксис.
  • Используются сравнения дат вместо вызова функций.Это и понятнее, и оптимизатору.
  • Псевдонимы таблиц - это аббревиатуры для имени таблицы, поэтому выполнять запрос проще.
...