27,580
社区成员
发帖
与我相关
我的任务
分享
create table bill(单号 int,发货人 varchar(1), 收货人 varchar(1),目的地 varchar(6),件数 int, 运费 int)
insert bill
select 1 ,'A','B','北京', 1 ,50 union all
select 2 ,'C','D','广州', 1 ,100 union all
select 3 ,'E','F','上海', 1 ,20 union all
select 4 ,'G','H','北京', 2 ,50
with cte as
(
select 单号,发货人,收货人,目的地,件数,运费 from bill --where 日期 between 日期A and 日期B
)
select case when 发货人 is null then null else 单号1 end as 单号,发货人,收货人,
case when 发货人 is null then '合计' else 目的地1 end as 目的地,件数,运费
from
(select 单号 as 单号1,发货人,收货人,目的地 as 目的地1,件数,运费 from cte
union all
select max(单号)+1,null,null,目的地,sum(件数)件数,sum(运费)运费 from cte group by 目的地) tb
order by 目的地1,单号1
/*
单号 发货人 收货人 目的地 件数 运费
----------- ---- ---- ------ ----------- -----------
1 A B 北京 1 50
4 G H 北京 2 50
NULL NULL NULL 合计 3 100
2 C D 广州 1 100
NULL NULL NULL 合计 1 100
3 E F 上海 1 20
NULL NULL NULL 合计 1 20
(7 行受影响)
*/