需要生成报告,我使用 union 来完成,但这不是要求。
问题描述如下:
该表包含 2010 年和 2011 年某些商店商品的销售信息。我只想显示按商品级别汇总的销售额总和,然后是商店级别,然后是年份级别,最后是总计。
您可以使用以下 SQL 语句创建示例数据:
create table item_sto_year_sale_t
(
itemno integer,
store varchar2(10),
year integer,
sale integer
);
insert into item_sto_year_sale_t values(1,'A',2010,100);
insert into item_sto_year_sale_t values(2,'A',2010,200);
insert into item_sto_year_sale_t values(3,'A',2010,300);
insert into item_sto_year_sale_t values(1,'B',2010,105);
insert into item_sto_year_sale_t values(2,'B',2010,205);
insert into item_sto_year_sale_t values(1,'A',2011,110);
insert into item_sto_year_sale_t values(2,'A',2011,220);
insert into item_sto_year_sale_t values(3,'A',2011,330);
insert into item_sto_year_sale_t values(1,'B',2011,115);
insert into item_sto_year_sale_t values(2,'B',2011,225);
commit;
期望的输出是
ITEMNO STORE YEAR SUM
---------- ---------- ---------- ----------
1 430 ---- sum(sales) in all stores for all years where itemno = 1
2 850 ---- sum(sales) in all stores for all years where itemno = 2
3 630 ---- sum(sales) in all stores for all years where itemno = 3
A 1260 ---- sum(sales) for all items for all years in store = 'A'
B 650 ---- sum(sales) for all items for all years in store = 'A'
2010 910 ---- sum(sales) for all items in all stores where year = 2010
2011 1000 ---- sum(sales) for all items in all stores where year = 2011
非常感谢对此的任何帮助
最佳答案
您可以使用GROUPING SETS
- 它比使用多个UNION
非常简单明了
SELECT itemno
,store
,year
,SUM(SALE)
FROM item_sto_year_sale_t
GROUP BY GROUPING SETS((itemno), (store), (year));
关于sql - 高级 SQL - 如何显示 Oracle 表中多个列的运行总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50770669/