读书人

一个计数统计有关问题

发布时间: 2012-02-23 22:01:34 作者: rapoo

一个计数统计问题?
--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

读书人网 >SQL Server

热点推荐