现在通过查询得出了下面这一张表:
季度 区县 街道 户型 房屋数量
1 朝阳区 东湖 两室一厅 1
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 西四 两室一厅 1
2 东城区 东四 一室一厅 1
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 西单 一室一厅 1
3 东城区 东单 一室一厅 1
3 东城区 万泉庄 一室一厅 1
但是要求得到的表格确实下面这样的
季度 区县 街道 户型 房屋数量
1 合计 8
1 朝阳区 小计 1
1 朝阳区 东湖 两室一厅 1
1 海淀区 小计 6
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 小计 1
1 西城区 西四 两室一厅 1
2 合计 4
2 东城区 小计 1
2 东城区 东四 一室一厅 1
2 海淀区 小计 2
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 小计 1
2 西城区 西单 一室一厅 1
3 合计 2
3 东城区 小计 1
3 东城区 东单 一室一厅 1
3 东城区 小计 1
3 东城区 万泉庄 一室一厅 1
多了两个要求,一个是按季度统计出所有出租房屋的数量,以及按季度按区县统计所有出租房屋数量,简单地说就是如何在第一张表的基础上如何变为第二章的效果?
季度 区县 街道 户型 房屋数量
1 朝阳区 东湖 两室一厅 1
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 西四 两室一厅 1
2 东城区 东四 一室一厅 1
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 西单 一室一厅 1
3 东城区 东单 一室一厅 1
3 东城区 万泉庄 一室一厅 1
但是要求得到的表格确实下面这样的
季度 区县 街道 户型 房屋数量
1 合计 8
1 朝阳区 小计 1
1 朝阳区 东湖 两室一厅 1
1 海淀区 小计 6
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 小计 1
1 西城区 西四 两室一厅 1
2 合计 4
2 东城区 小计 1
2 东城区 东四 一室一厅 1
2 海淀区 小计 2
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 小计 1
2 西城区 西单 一室一厅 1
3 合计 2
3 东城区 小计 1
3 东城区 东单 一室一厅 1
3 东城区 小计 1
3 东城区 万泉庄 一室一厅 1
多了两个要求,一个是按季度统计出所有出租房屋的数量,以及按季度按区县统计所有出租房屋数量,简单地说就是如何在第一张表的基础上如何变为第二章的效果?
if object_id('test') is not null
drop table test
go
create table test(单位 varchar(10),月份 int, 数据1 decimal(8,2),
数据2 decimal(8,2), 数据3 decimal(8,2), 数据4 decimal(8,2))
insert into test
select '公司1' ,1, 3.30 , 9.00 , 2.00 , 2.00 union
select '公司2', 1, 4.20, 9.60 , 2.10, 2.00 union
select '公司3', 1 ,1.00 , 9.00, 6.50 , 2.00 union
select '公司1', 2, 3.00 , 2.00 , 2.00 , 7.80 union
select '公司2', 3 ,4.20, 9.60 , 2.10 , 2.00
select isnull(单位,'平均值') as 单位,avg(数据1),avg(数据2),avg(数据3),avg(数据4) from test where 月份=1
group by 单位 with rollup
/*
单位
---------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
公司1 3.300000 9.000000 2.000000 2.000000
公司2 4.200000 9.600000 2.100000 2.000000
公司3 1.000000 9.000000 6.500000 2.000000
平均值 2.833333 9.200000 3.533333 2.000000(4 row(s) affected)
*/
select 单位,数据1,数据2,数据3,数据4 from test where 月份=1
union all
select isnull('平均','')单位,avg(数据1)数据1,avg(数据2)数据2,avg(数据3)数据3,avg(数据4)数据4 from test where 月份=1
select 1 季度, N'朝阳区' 区县,N'东湖' 街道,N'两室一厅' 户型,1 房屋数量
into #t
union all select 1, N'海淀区' ,N'苏州街' ,N'两室一厅' ,3
union all select 1, N'海淀区' ,N'苏州街' ,N'一室一厅' ,1
union all select 1, N'海淀区' ,N'万泉庄' ,N'两室一厅' ,1
union all select 1, N'海淀区' ,N'中关村',N'一室一厅' ,1
union all select 1, N'西城区' ,N'西四' ,N'两室一厅' ,1
union all select 2, N'东城区' ,N'东四' ,N'一室一厅' ,1
union all select 2, N'海淀区' ,N'万泉庄',N'一室一厅' ,1
union all select 2, N'海淀区' ,N'中关村',N'一室一厅' ,1
union all select 2, N'西城区' ,N'西单', N'一室一厅' ,1
union all select 3, N'东城区' ,N'东单' ,N'一室一厅' ,1
union all select 3, N'东城区' ,N'万泉庄', N'一室一厅', 1
select [季度],isnull([区县],N'合计') [区县]
,case when [区县] is null then '' else isnull([户型],N'小计') end [户型],sum(房屋数量) as [房屋数量]
from #t
group by rollup([季度],[区县],[户型])
create table nd
(季度 int, 区县 varchar(10), 街道 varchar(10), 户型 varchar(20), 房屋数量 int)insert into nd
select 1, '朝阳区', '东湖', '两室一厅', 1 union all
select 1, '海淀区', '苏州街', '两室一厅', 3 union all
select 1, '海淀区', '苏州街', '一室一厅', 1 union all
select 1, '海淀区', '万泉庄', '两室一厅', 1 union all
select 1, '海淀区', '中关村', '一室一厅', 1 union all
select 1, '西城区', '西四', '两室一厅 ', 1 union all
select 2, '东城区', '东四', '一室一厅', 1 union all
select 2, '海淀区', '万泉庄', '一室一厅', 1 union all
select 2, '海淀区', '中关村', '一室一厅', 1 union all
select 2, '西城区', '西单', '一室一厅', 1 union all
select 3, '东城区', '东单', '一室一厅', 1 union all
select 3, '东城区', '万泉庄', '一室一厅', 1
select *
from
(select 季度 '季度',
isnull(区县,'合计') '区县',
case when 区县 is not null then '小计' else '' end '街道',
'' '户型',
sum(房屋数量) '房屋数量'
from nd group by 季度,区县 with rollup having grouping(季度)=0
union all
select 季度,区县,街道,户型,房屋数量 from nd
) t
order by 季度,
case when 区县='合计' then '' else 区县 end,
case when 街道='' then 1
when 街道='小计' then 2
else 3 end/*
季度 区县 街道 户型 房屋数量
----------- ---------- ---------- -------------------- -----------
1 合计 8
1 朝阳区 小计 1
1 朝阳区 东湖 两室一厅 1
1 海淀区 小计 6
1 海淀区 苏州街 两室一厅 3
1 海淀区 苏州街 一室一厅 1
1 海淀区 万泉庄 两室一厅 1
1 海淀区 中关村 一室一厅 1
1 西城区 小计 1
1 西城区 西四 两室一厅 1
2 合计 4
2 东城区 小计 1
2 东城区 东四 一室一厅 1
2 海淀区 小计 2
2 海淀区 万泉庄 一室一厅 1
2 海淀区 中关村 一室一厅 1
2 西城区 小计 1
2 西城区 西单 一室一厅 1
3 合计 2
3 东城区 小计 2
3 东城区 东单 一室一厅 1
3 东城区 万泉庄 一室一厅 1(22 row(s) affected)
*/