班组ID 员工 白班或夜班 合格品数量 总产品数量 rq
1 张三 白班 90 100 2013/1/1
1 张三 夜班 80 100 2013/1/1
1 李四 夜班 80 100 2013/1/1
1 王五 白班 96 100 2013/1/2
1 张三 夜班 83 100 2013/1/2
1 李四 夜班 83 100 2013/1/2
2 sam 白班 186 200 2013/1/1
2 sam 夜班 160 200 2013/1/1
2 john 夜班 160 200 2013/1/1
2 mike 白班 176 200 2013/1/2
2 sam 夜班 166 200 2013/1/2
2 john 夜班 166 200 2013/1/2
..............................................
我想每月统计出每个人合格率并排序,每个月从月初统计到该月最大日期,该如何做呢?
------解决方案--------------------
Select * From(
Select [员工],datename(yyyy,[rq
]),datename(mm,[rq
]),sum([合格品数量])*100/sum([合格品数量]) as [合格率] From [表]
Group by [员工],datename(yyyy,[rq
]),datename(mm,[rq])) as tb ORder by [合格率] DESC
------解决方案--------------------
CREATE TABLE t_Job
(
班组ID INT,
员工 VARCHAR(10),
白班或夜班 VARCHAR(10),
合格品数量 int,
总产品数量 int,
rq date
)
insert into t_Job
select 1,'张三','白班',90,100,'2013/1/1'
union all
select 1,'张三','夜班',80,100,'2013/1/1'
union all
select 1,'李四','夜班',90,100,'2013/1/1'
union all
select 1,'王五','白班',96,100,'2013/1/2'
union all
select 1,'张三','夜班',83,100,'2013/1/2'
union all
select 1,'李四','夜班',83,100,'2013/1/1'
union all
select 2,'sam','白班',186,200,'2013/1/1'
union all
select 2,'sam','夜班',160,200,'2013/1/1'
union all
select 2,'john','夜班',160,200,'2013/1/1'
union all
select 2,'mike','白班',176,200,'2013/1/2'
union all
select 2,'sam','夜班',166,200,'2013/1/2'
union all
select 2,'john','夜班',166,200,'2013/1/2'
select * from t_Job;
select tm.* from
(
select 员工,cast(SUM(合格品数量) as decimal)/SUM(总产品数量) 合格率, DATEPART(m,rq) ToMonth from t_Job group by [员工], DATEPART(m,rq)) tm
order by tm.合格率 desc
/*
员工 合格率 ToMonth
---------- --------------------------------------- -----------
王五 0.96000000000 1
mike 0.88000000000 1
李四 0.86500000000 1