日期:2014-05-18  浏览次数:20535 次

求周,月,6个月内的各项统计

表格式:
table   evaluate   {

theCode   int自增,
saleID   int,--用户ID
elevel   char(1),--分 "好 ", "中 ", "差 "三种
Dtime Datetime
}

好的一分,中不得分,差得-1分;
根据   saleID,elevel,Dtime来计算;
实现效果:
                  1周                   一个月内           6个月内
好:             5(假想值)       5                           0
中:             0                           0                         0
差:             0                           1                           0
统计:         5                           4                           0

一次性得到所有数据

------解决方案--------------------
declare @saleID int
set @saleID=1 --参数

select elevel,sum(case when Dtime> =dateadd(week,-1,getdate()) then 1 else 0 end) as [1周]
,sum(case when Dtime> =dateadd(month,-1,getdate()) then 1 else 0 end) as [1个月内]
,sum(case when Dtime> =dateadd(month,-6,getdate()) then 1 else 0 end) as [6个月内]
from evaluate
where saleID=@saleID
group by elevel
union all
select '统计 ',sum(case when Dtime> =dateadd(week,-1,getdate()) then case elevel when '好 ' then 1 when '差 ' then -1 else 0 end else 0 end) as [1周]
,sum(case when Dtime> =dateadd(month,-1,getdate()) then case elevel when '好 ' then 1 when '差 ' then -1 else 0 end else 0 end) as [1个月内]
,sum(case when Dtime> =dateadd(month,-6,getdate()) then case elevel when '好 ' then 1 when '差 ' then -1 else 0 end else 0 end) as [6个月内]
from evaluate
where saleID=@saleID

------解决方案--------------------
1、第一个问题,elevel char(1),--修改一下,改成varchar(4)。

2、create table evaluate (theCode int,saleID int,elevel varchar(4),Dtime Datetime)
insert evaluate
select 1,1, '好 ', '2007-09-01 ' union all
select 2,1, '中 ', '2007-08-11 ' union all
select 3,1, '好 ', '2007-09-01 ' union all
select 4,1, '中 ', '2007-09-01 ' union all
select 5,1, '好 ', '2007-07-01 ' union all
select 6,1, '好 ', '2007-09-5 ' union all
select 7,1, '差 ', '2007-09-01 ' union all
select 8,1, '好 ', '2007-09-4 ' union all
select 9,1, '好 ', '2007-08-01 ' union all
select 10,1, '差 ', '2007-09-01 ' union all
select 11,1, '好 ', '2007-09-01 '

select isnull(elevel, '统计 '),sum(case when Dtime> =dateadd(week,-1,getdate()) then 1 else 0 end) as [1周]
,sum(case when Dtime> =dateadd(month,-1,getdate()) then 1 else 0 end) as [1个月内]
,sum(case when Dtime> =dateadd(month,-6,getdate()) then 1 else 0 end) as [6个月内]
from evaluate
group by elevel
with rollup

drop table evaluate