|
表 a
日期 店名 销售 12月1日 A 12 12月1日 B 21 12月1日 C 36 12月2日 A 8 12月2日 C 6 12月2日 B 5 12月3日 B 2 12月3日 A 1 12月3日 C 10 如何得到一个这样的查询结果 日期 店名 销售 占比 12月1日 A 12 17.39% 12月1日 B 21 30.43% 12月1日 C 36 52.17% 合计 69 12月2日 A 8 42.11% 12月2日 C 6 31.58% 12月2日 B 5 26.32% 合计 19 12月3日 B 2 15.38% 12月3日 A 1 7.69% 12月3日 C 10 76.92% 合计 13 |
---测试数据---
if object_id('[a]') is not null drop table [a]
go
create table [a]([日期] varchar(7),[店名] varchar(1),[销售] int)
insert [a]
select '12月1日','A',12 union all
select '12月1日','B',21 union all
select '12月1日','C',36 union all
select '12月2日','A',8 union all
select '12月2日','C',6 union all
select '12月2日','B',5 union all
select '12月3日','B',2 union all
select '12月3日','A',1 union all
select '12月3日','C',10
---查询---
select
日期=case when 店名='' then '合计' else 日期 end,
店名,
销售,
占比
from
(
select a.日期 as px,a.*,ltrim(cast(a.销售*100.0/b.销售 as dec(18,2)))+'%' as 占比
from a
join
(select 日期,sum(销售) as 销售 from a group by 日期) b
on a.日期=b.日期
union all
select 日期 as px,日期,'',sum(销售) as 销售,'' from a group by 日期
) t
order by px,case when 店名='' then 2 else 1 end,店名
---结果---
日期 店名 销售 占比
------- ---- ----------- -----------------------------------------
12月1日 A 12 17.39%
12月1日 B 21 30.43%
12月1日 C 36 52.17%
合计 69
12月2日 A 8 42.11%
12月2日 B 5 26.32%
12月2日 C 6 31.58%
合计 19
12月3日 A 1 7.69%
12月3日 B 2 15.38%
12月3日 C 10 76.92%
合计 13
(所影响的行数为 12 行)

被折叠的 条评论
为什么被折叠?



