需要这样的统计结果,请大家指点
我的一个数据表中有这些资料
ID主题大类小类类别时间
1价格不太对百货电视价格2007-1-1
2主题内容百货电视质量2007-1-1
3主题内容百货冰箱质量2007-1-1
4主题内容服务类互连网质量2007-1-1
最终要得到这样形式的统计表
根据给出的时间段得出该时间范围内的如下统计表:
项目价格质量合计
电视112
冰箱011
百货(小计)123
互连网011
服务类(小计)011
[解决办法]
价格同质量从那来的?
[解决办法]
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
/*
项目价格质量合计
电视112
冰箱011
百货(小计)123
互连网011
服务类(小计)011
*/
[解决办法]
select isnull(小类,大类+ ' 小计: '),count(case when 类别= '价格 ' then 1 end) ,
count(case when 类别= '质量 ' then 1 end),count(1)
from # group by 大类,小类 WITH ROLLUP having grouping(大类) <> 1