班组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
..............................................我想每月统计出每个人合格率并排序,每个月从月初统计到该月最大日期,该如何做呢?

解决方案 »

  1.   

    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
      

  2.   


    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
    sam        0.85333333333                           1
    张三         0.84333333333                           1
    john       0.81500000000                           1(6 行受影响)
    */
      

  3.   

    ---author:viola
    ---version:sql server 2008 r2
    --统计每个人每个月的合格率
    IF object_id('cheJian') is not null drop TABLE cheJian
    create table cheJian

    classID int,
    name nvarchar(20),
    NightOrDay  nvarchar(20),
    OkNumber int,
    Total int,
    rq date
    ) delete FROM cheJianinsert INTO cheJian VALUES(1, N'张三', N'白班', 90 ,100 ,'2013/1/1')
    insert INTO cheJian VALUES(1, N'张三', N'夜班', 80, 100, '2013/1/1')
    insert INTO cheJian VALUES(1, N'李四', N'夜班', 80, 100, '2013/1/1')
    insert INTO cheJian VALUES(1, N'王五', N'白班', 96, 100, '2013/1/2')
    insert INTO cheJian VALUES(1, N'张三', N'夜班', 83, 100, '2013/1/2')
    insert INTO cheJian VALUES(1, N'李四', N'夜班', 83, 100, '2013/1/2')
    insert INTO cheJian VALUES(2, 'sam', N'白班', 186,200, '2013/1/1')
    insert INTO cheJian VALUES(2, 'sam', N'夜班', 160, 200, '2013/1/1')
    insert INTO cheJian VALUES(2, 'john', N'夜班', 160, 200, '2013/1/1')
    insert INTO cheJian VALUES(2, 'mike', N'白班', 176, 200, '2013/1/2')
    insert INTO cheJian VALUES(2, 'sam', N'夜班', 166, 200, '2013/1/2')
    insert INTO cheJian VALUES(2, 'john', N'夜班', 166, 200,'2013/1/2')select name,convert(decimal(4,2),sum(OkNumber*1.0/Total)) as '合格率','月份'=MONTH(rq) from cheJian group by name,MONTH(rq)