计算列内的差异

Calculating variances within a column

注:第一个table是当前数据集,第二个table是请求的结果。

我正在考虑创建临时的 table X 和 Y,它们分别具有销售和销售与服务价值数据,并使用连接计算方差。我想知道这是否是 right/convenient 解决此问题的方法?

我想你只是想要条件聚合:

select region,
       sum(case when type = 'Sales' then - Amount
                when type = 'Sales&Service' then Amount
           end) as service_only
from t
group by region;

如果你想要总计,那取决于你的数据库。许多支持 rollupgrouping sets 允许将其作为聚合的一部分。

--drop table product;
create table product(region varchar2(10),type varchar2(30),amount number(5,2));
insert into product values('A','Sales',100);
insert into product values('B','Sales',150);
insert into product values('C','Sales',170);
insert into product values('D','Sales',180);
insert into product values('A',(select 'Sales'||'&'||'service' from dual),120);
insert into product values('B',(select 'Sales'||'&'||'service' from dual),195);
insert into product values('C',(select 'Sales'||'&'||'service' from dual),178.5);
insert into product values('D',(select 'Sales'||'&'||'service' from dual),183.6);



select sum(decode(type,'Sales',amount,0)) sales,
sum(decode(type,(select 'Sales'||'&'||'service' from dual),amount,0)) sales_servie_only,
sum(decode(type,(select 'Sales'||'&'||'service' from dual),amount,0))-sum(decode(type,'Sales',amount,0))as total
from product
group by ROLLUP(region);

--我们可以通过使用 case and decode and sum and group by clause