oracle中如何添加小计和总计
Posted
技术标签:
【中文标题】oracle中如何添加小计和总计【英文标题】:How to add subtotal and total in oracle 【发布时间】:2019-04-09 19:19:23 【问题描述】:我想将总计和小计添加到 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
我该怎么做?我尝试了汇总之类的功能,但不知道如何使用它。关于如何修改查询的任何建议?谢谢!
【问题讨论】:
如果你想在结果集中除了其他记录之外还有subtotal
和total
记录,它们的列数必须与其他记录相同。您要将subtotal
和total
名称放在哪一列?
oracletutorial.com/oracle-basics/oracle-rollup
你应该在这里找到答案:***.com/questions/19387650/…
【参考方案1】:
你可以使用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
语法。
使用日期比较,而不是调用函数。这既更清晰,也使优化器更容易。
表别名是表名的缩写,查询起来更容易。
【讨论】:
以上是关于oracle中如何添加小计和总计的主要内容,如果未能解决你的问题,请参考以下文章