暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何用group by汇总总计

ASKTOM 2020-03-12
406

问题描述

嗨,康纳,克里斯,

您能帮我为以下情况构建SQL吗

我有一个带有order_loc的orders表,我希望基于order_loc的不同order_cci的SQL输出,并且在每个order_loc的末尾,我需要汇总order_cci计数,如下所示:
“SB” 是每行的硬编码值,“SF” 是用于不同order_cci求和的硬编码值

SB AA1 1美元200
SB AA1 3美元300
SB AA1 2 JPY 250
SF USD 500
SF JPY 250
SB BB1 4美元200
SB BB1 5美元300
SF USD 500

create table orders
(
 order_id number,
 order_name varchar2(20 char),
 order_amt number,
 order_ccy varchar2(20 char),
 order_loc varchar2(20 char)
)
/

insert into orders values (1,'A',200,'USD','AA1');

insert into orders values (2,'B',250,'JPY','AA1');

insert into orders values (3,'C',300,'USD','AA1');

insert into orders values (4,'D',400,'USD','BB1');

insert into orders values (5,'E',500,'USD','BB1');

复制



专家解答

您可以使用汇总、多维数据集和分组集来获取各种组合的小计

请求的输出似乎与示例数据不匹配。但似乎您想获取以下内容的小计:

-每个ID、LOC和货币
-每种LOC和货币

因此,通过以下方式将这些放在组中的分组集中:

select case
         when order_id is null then 'SF'
         else 'SB'
       end summation,
       order_id,
       order_loc, order_ccy, sum ( order_amt )
from   orders
group  by grouping sets ( 
  ( order_id, order_ccy, order_loc ),
  ( order_ccy, order_loc )
)
order  by order_loc, order_id nulls last;

SUMMATION    ORDER_ID    ORDER_LOC    ORDER_CCY    SUM(ORDER_AMT)   
SB                     1 AA1          USD                        200 
SB                     2 AA1          JPY                        250 
SB                     3 AA1          USD                        300 
SF                 AA1          USD                        500 
SF                 AA1          JPY                        250 
SB                     4 BB1          USD                        400 
SB                     5 BB1          USD                        500 
SF                 BB1          USD                        900
复制

文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论