sql - 高级 SQL - 如何显示 Oracle 表中多个列的运行总和

标签 sql oracle

需要生成报告,我使用 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));

Demo

关于sql - 高级 SQL - 如何显示 Oracle 表中多个列的运行总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50770669/

相关文章:

sql - 加速在两列上过滤并在函数上排序的 postgres 查询

oracle - 从 HTML 链接执行 Oracle Apex 流程

performance - 如何分析 Oracle 存储过程的端到端性能

mysql - varchar(0) 的用途是什么

php - 使用 PHP 和 MySQL 将信息从一个表传输到另一个表

mysql - sql内连接查看表

mysql - 如何在 MYSQL 中将行配对在一起?

mysql - 违反完整性约束 (LEETO14.SYS_C00414504)

asp.net - Oracle 和 asp.net

sql - 为什么我无法在临时表上创建索引?