表1
ID 客户 销售额
1 a 100
2 a 200
3 b 100
4 c 150
5 c 300
表2
客户 地区
a 华东
b 东北
c 东北
需要生成如下的汇总表
客户 销售额
b 100
c 450
东北 550
a 300
华东 300
合计 850
这样的sql如何写?主要是排序不知道怎么搞
...全文
24110打赏收藏
汇总后按汇总列由高到低排序的问题
表1 ID 客户 销售额 1 a 100 2 a 200 3 b 100 4 c 150 5 c 300 表2 客户 地区 a 华东 b 东北 c 东北 需要生成如下的汇总表 客户 销售额 b 100 c 450 东北 550 a 300 华东 300 合计 850 这样的sql如何写?主要是排序不知道怎么搞
-- 加倒序
select
客户 = case when b.地区 is null then '合计' when b.客户 is not null then b.客户 else b.地区 end,
销售额 = sum(a.销售额)
from 表1 a, 表2 b
where a.客户 = b.客户
group by b.地区, b.客户 with rollup
order by grouping(b.地区), b.地区, grouping(b.客户),销售额 desc
select a.客户,a.销售额,c.sum_销售额 order1,b.地区 order2,0 order3 from 表1 a
join 表2 b on a.客户=b.客户
join (select b.地区,sum(a.销售额) sum_销售额,1 order2 from 表1 a join 表2 b on a.客户=b.客户 group by b.地区) c
on b.地区=c.地区
union all
select b.地区,sum(a.销售额),sum(a.销售额) order1,b.地区 order2,1 order3 from 表1 a join 表2 b on a.客户=b.客户 group by b.地区
union all
select '合计',sum(销售额),0 order1,'zzzzzzzzzzzzzzzzzzzz' order2,3 order3 from 表1
select
客户 = case when b.地区 is null then '合计' when b.客户 is not null then b.客户 else b.地区 end,
销售额 = sum(a.销售额)
from 表1 a, 表2 b
where a.客户 = b.客户
group by b.地区, b.客户 with rollup
select a.客户,a.销售额,c.sum_销售额 order1,b.地区 order2,0 order3 from 表1 a
join 表2 b on a.客户=b.客户
join (select b.地区,sum(a.销售额) sum_销售额,1 order2 from 表1 a join 表2 b on a.客户=b.客户 group by b.地区) c
on b.地区=c.地区
union all
select b.地区,sum(a.销售额),sum(a.销售额) order1,b.地区 order2,1 order3 from 表1 a join 表2 b on a.客户=b.客户 group by b.地区
--可以用如下
Select 客户,销售额 from (
Select 客户,销售额=sum(销售额) ,max(ID) as orID
from tab1 group by 客户
union
Select b.地区,销售额=sum(a.销售额), max(id) as orID
from tab1 as a,tab2 as b
where a.客户=b.客户 group by b.地区
union
Select '合计',销售额=sum(销售额),max(id)+1 as orID
from tab1 ) t order by orID,客户