首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个计数统计有关问题

2012-02-23 
一个计数统计问题?--26天以内和26天以外的数据区分--目的:按员工计算其产量,同时要区分从指定日期开始前26

一个计数统计问题?
--26天以内和26天以外的数据区分
--目的:按员工计算其产量,同时要区分从指定日期开始前26天和26以后的产量//注意,日期中间可能有中断,也就是说要从指定日期开始按员工计数,看是否已满26天
Create   Table   #TEST
(rq   datetime,--日期
  ygname   varchar,--员工姓名
  cl   Int)--产量
Insert   #TEST   Select   2006-03-26,             'A ',             1    
Union   All   Select   2006-03-27,             'A ',             1
Union   All   Select   2006-03-28,             'A ',             1  
Union   All   Select   2006-03-29,             'A ',             1    
Union   All   Select   2006-03-30,             'A ',             1
Union   All   Select   2006-03-31,             'A ',             1
Union   All   Select   2006-04-01,             'A ',             1    
Union   All   Select   2006-04-02,             'A ',             1  
Union   All   Select   2006-04-03,             'A ',             1  
Union   All   Select   2006-04-04,             'A ',             1  
Union   All   Select   2006-04-05,             'A ',             1    
Union   All   Select   2006-04-06,             'A ',             1  
Union   All   Select   2006-04-07,             'A ',             1  
Union   All   Select   2006-04-08,             'A ',             1  
Union   All   Select   2006-04-09,             'A ',             1    
Union   All   Select   2006-04-10,             'A ',             1  
Union   All   Select   2006-04-11,             'A ',             1  
Union   All   Select   2006-04-12,             'A ',             1  
Union   All   Select   2006-04-13,             'A ',             1    
Union   All   Select   2006-04-14,             'A ',             1  
Union   All   Select   2006-04-15,             'A ',             1  
Union   All   Select   2006-04-16,             'A ',             1  


Union   All   Select   2006-04-17,             'A ',             1  
Union   All   Select   2006-04-18,             'A ',             1  
Union   All   Select   2006-04-19,             'A ',             1  
Union   All   Select   2006-04-20,             'A ',             1    
Union   All   Select   2006-04-21,             'A ',             1  
Union   All   Select   2006-04-22,             'A ',             1  
Union   All   Select   2006-04-23,             'A ',             1  
Union   All   Select   2006-04-24,             'A ',             1  
Union   All   Select   2006-04-25,             'A ',             1  

Union   ALL   Select   2006-03-27,             'B ',             1
Union   ALL   Select   2006-03-28,             'B ',             1  
Union   ALL   Select   2006-03-29,             'B ',             1    
Union   ALL   Select   2006-03-30,             'B ',             1
Union   ALL   Select   2006-03-31,             'B ',             1
Union   ALL   Select   2006-04-01,             'B ',             1    
Union   ALL   Select   2006-04-02,             'B ',             1  
Union   ALL   Select   2006-04-03,             'B ',             1  
Union   ALL   Select   2006-04-04,             'B ',             1  
Union   ALL   Select   2006-04-05,             'B ',             1    
Union   ALL   Select   2006-04-06,             'B ',             1  
Union   ALL   Select   2006-04-07,             'B ',             1  
Union   ALL   Select   2006-04-08,             'B ',             1  
Union   ALL   Select   2006-04-09,             'B ',             1    
Union   ALL   Select   2006-04-10,             'B ',             1  


Union   ALL   Select   2006-04-11,             'B ',             1  
Union   ALL   Select   2006-04-12,             'B ',             1  
Union   ALL   Select   2006-04-13,             'B ',             1    
Union   ALL   Select   2006-04-14,             'B ',             1  
Union   ALL   Select   2006-04-15,             'B ',             1  
Union   ALL   Select   2006-04-16,             'B ',             1  
Union   ALL   Select   2006-04-17,             'B ',             1  
Union   ALL   Select   2006-04-18,             'B ',             1  
Union   ALL   Select   2006-04-19,             'B ',             1  
Union   ALL   Select   2006-04-20,             'B ',             1    
Union   ALL   Select   2006-04-21,             'B ',             1  
Union   ALL   Select   2006-04-22,             'B ',             1  
Union   ALL   Select   2006-04-23,             'B ',             1  
Union   ALL   Select   2006-04-24,             'B ',             1  
Union   ALL   Select   2006-04-25,             'B ',             1  

--SELECT   *   FROM   #TEST
--结果应该如下:
YGNAME             26QH                CL
A      前26天                26
A                       26天后                5
B      前26天        26
B2     6天后            4

[解决办法]
seairhh(风乍起,吹皱一池秋水) ( ) 信誉:100 Blog 加为好友 2007-05-07 11:45:03 得分: 0


有重复就汇总,我看了的你是用COUNT(RQ) AS CL


--------
有重復就匯總是什麼意思?

我用的是COUNT(Distinct RQ) AS CL,每天只統計一次


難道你要的是這樣的效果?

Declare @StartRq DateTime, @EndRq DateTime
Select @StartRq = '2006-03-26 ', @EndRq = '2006-04-25 '

Select
YGNAME,
N '前26天 ' As [26QH],
SUM(CL) As CL
From
#TEST A
Where
rq In (Select Distinct TOP 26 rq From #TEST Where YGNAME = A.YGNAME And rq Between @StartRq And @EndRq Order By rq)
Group By
YGNAME
Union
Select
YGNAME,
N '26天后 ' As [26QH],
SUM(CL) As CL
From
#TEST A
Where
rq Not In (Select Distinct TOP 26 rq From #TEST Where YGNAME = A.YGNAME And rq Between @StartRq And @EndRq Order By rq)


Group By
YGNAME
Order By
YGNAME, [26QH] Desc

热点排行