Расширенный SQL - как я могу показать сумму выполнения по нескольким столбцам в таблице в Oracle - PullRequest
0 голосов
/ 09 июня 2018

Необходимо создать отчет, я сделал это с помощью объединения, но это не является обязательным требованием.

Вот формулировка проблемы:

Таблица содержит информацию о продаже предметов нав некоторых магазинах за 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

Любая помощь по этому вопросу высоко ценится

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Вы можете использовать GROUPING SETS - Это довольно просто и просто, чем использовать несколько UNION

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

Демо

0 голосов
/ 09 июня 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...