需要这样的统计结果,请大家指点
我的一个数据表中有这些资料
ID 主题 大类 小类 类别 时间
1 价格不太对 百货 电视 价格 2007-1-1
2 主题内容 百货 电视 质量 2007-1-1
3 主题内容 百货 冰箱 质量 2007-1-1
4 主题内容 服务类 互连网 质量 2007-1-1
最终要得到这样形式的统计表
根据给出的时间段得出该时间范围内的如下统计表:
项目 价格 质量 合计
电视 1 1 2
冰箱 0 1 1
百货(小计) 1 2 3
互连网 0 1 1
服务类(小计) 0 1 1
------解决方案--------------------价格同质量从那来的?
------解决方案-------------------- create table #T(ID int,主题 varchar(100),大类 varchar(100),小类 varchar(100),类别 varchar(100),时间 datetime)
insert into #t select 1, '价格不太对 ', '百货 ', '电视 ', '价格 ', '2007-1-1 '
insert into #t select 2, '主题内容 ', '百货 ', '电视 ', '质量 ', '2007-1-1 '
insert into #t select 3, '主题内容 ', '百货 ', '冰箱 ', '质量 ', '2007-1-1 '
insert into #t select 4, '主题内容 ', '服务类 ', '互连网 ', '质量 ', '2007-1-1 '
select 小类,价格,质量,合计
from
(
select
大类,
小类,
sum(case when 类别= '价格 ' then 1 else 0 end) as 价格,
sum(case when 类别= '质量 ' then 1 else 0 end) as 质量,
sum(1) as 合计,
1 as xh
from #t
group by 大类,小类
union all
select 大类,大类 + '(小计) ' as 小类,
sum(case when 类别= '价格 ' then 1 else 0 end) as 价格,
sum(case when 类别= '质量 ' then 1 else 0 end) as 质量,
sum(1) as 合计,
2 as xh
from #t
group by 大类) T
order by 大类,xh
drop table #t
/*
项目 价格 质量 合计
电视 1 1 2
冰箱 0 1 1
百货(小计) 1 2 3
互连网 0 1 1
服务类(小计) 0 1 1
*/
------解决方案--------------------select isnull(小类,大类+ ' 小计: '),count(case when 类别= '价格 ' then 1 end) ,
count(case when 类别= '质量 ' then 1 end),count(1)
from # group by 大类,小类 WITH ROLLUP having grouping(大类) <> 1