2

需要生成报告,我使用联合来完成,但这不是必需的。

这是问题陈述:

该表包含 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

对此的任何帮助都非常感谢

4

2 回答 2

3

你可以使用GROUPING SETS- 它比使用多个简单明了UNION

SELECT itemno
    ,store
    ,year
    ,SUM(SALE)
FROM item_sto_year_sale_t
GROUP BY GROUPING SETS((itemno), (store), (year));

演示

于 2018-06-09T07:12:32.287 回答
1
select distinct to_char(itemno) , '' as STORE ,'' as YEAR,sum(sale)over(partition by itemno) as SUM from item_sto_year_sale_t
union 
select distinct '', STORE, '',sum(sale)over(partition by STORE) from item_sto_year_sale_t
union 
select distinct '', '', TO_CHAR(YEAR) ,sum(sale)over(partition by YEAR) from item_sto_year_sale_t
于 2018-06-09T03:52:54.467 回答