Sql 如何在oracle中添加小计和合计

Sql 如何在oracle中添加小计和合计,sql,oracle,subtotal,Sql,Oracle,Subtotal,我想在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

我想在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

我该怎么做?我尝试了类似rollup的功能,但不确定如何使用它。对如何修改查询有何建议?谢谢

您可以使用分组集:

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), () );
选择af.org\u id为“组织id”,a.org\u nm为“组织名称”,
af.trans_cd作为“交易”,
将字符(af.create,'mm/dd/yyyy')作为“日期”,
金额(af.trans_am)为“金额”
从adrs加入
广告费
在a.org\u id=af.org\u id上
其中af.creat>=日期“2019-04-01”和af.creat<日期“2019-05-01”
按分组集分组((af.org_id,a.org_nm,af.trans_cd,TO_CHAR(af.creat_ts,'mm/dd/yyyy')),(a.org_nm),());
请注意我对查询所做的更改:

  • 这使用了正确、明确、标准的
    JOIN
    语法
  • 使用日期比较,而不是调用函数。这对优化器来说既清晰又容易
  • 表别名是表名的缩写,因此查询更容易理解

如果要在结果集中除其他记录外还有
小计
总计
记录,则这些记录的列数必须与其他记录的列数相同。您想将
小计
总计
名称放在哪一列?您应该在这里找到答案: