背景:
   一个任务分配系统,想统计每个员工每天处理了多少条任务,占当天比率为多少
 
假设基础数据如下:  
   DateTM                         worker        
 2011-03-11 15:31:22 000           王明      
 2011-03-11 16:31:22 000           李海
 2011-03-11 16:31:22 000           周兴
 2011-03-11 18:31:22 000           王明 
     
 2011-03-12 15:31:22 000           张群      
 2011-03-12 12:31:22 000           王明
      
 2011-03-13 15:31:22 000           王明      
 2011-03-13 15:31:22 000           李海      
 2011-03-13 15:31:22 000           王明      
 2011-03-13 15:31:22 000           周兴 
 ……………………………………………………………………
查询后结果:
 日期         员工      处理条数     总数     占比
2011-03-11    王明        2           4       50%
2011-03-11    李海        1           4       25%
2011-03-12    张群        1           2       50%
……
以 日期 为分组条件,统计出 员工当日处理数,当日任务总数,员工处理占比。
请教 SQL语句,非常感谢。
       
            

解决方案 »

  1.   

    ;with c1 as(
    select convert(varchar(10),datetm,120)dt,worker from tb
    ),c2 as(
    select dt,count(*)ca from c1 group by dt
    ),c3 as(
    select dt,worker,count(*)ct from c1 group by dt,worker
    )select a.dt,a.worker,a.ct*100/b.ca from c3 a inner join c2 b on a.dt=b.dt
      

  2.   

    select convert(varchar(10),DateTM,120),worker,处理条数=count(*),
           总数=(select count(*) from tb where convert(varchar(10),DateTM,120)=
                                           convert(varchar(10),a.DateTM,120))
           占比=rtrim(count(*)*1./(select count(*) from tb 
                where convert(varchar(10),DateTM,120)= convert(varchar(10),a.DateTM,120)))+'%'
    from tb a group by convert(varchar(10),DateTM,120),worker
      

  3.   

    DECLARE @t TABLE
        (
          ttime DATETIME,
          NAME VARCHAR(20)
        )INSERT  INTO @t
    SELECT  '2011-03-11 15:31:22','王明'
    UNION ALL
    SELECT  '2011-03-11 16:31:22','李海'
    UNION ALL
    SELECT  '2011-03-11 16:31:22','周兴'
    UNION ALL
    SELECT  '2011-03-11 18:31:22','王明'
    UNION ALL
    SELECT  '2011-03-12 15:31:22','张群'
    UNION ALL
    SELECT  '2011-03-12 12:31:22','王明'
    UNION ALL
    SELECT  '2011-03-13 15:31:22','王明'
    UNION ALL
    SELECT  '2011-03-13 15:31:22','李海'
    UNION ALL
    SELECT  '2011-03-13 15:31:22','王明'
    UNION ALL
    SELECT  '2011-03-13 15:31:22','周兴'  
    SELECT  CONVERT(VARCHAR(10), a.ttime, 120) AS ttime,
            a.NAME,
            COUNT(1) AS num,
            ( SELECT    COUNT(1)
              FROM      @t b
              WHERE     CONVERT(VARCHAR(10), b.ttime, 120) = CONVERT(VARCHAR(10), a.ttime, 120)
            ) AS sumnum,
            COUNT(1) * 1.0
            / ( SELECT  COUNT(1)
                FROM    @t b
                WHERE   CONVERT(VARCHAR(10), b.ttime, 120) = CONVERT(VARCHAR(10), a.ttime, 120)
              )*100 AS perent 
    FROM    @t a
    GROUP BY CONVERT(VARCHAR(10), a.ttime, 120),
            a.NAME
    ORDER BY ttime 
    /*
    ttime NAME num sumnum perent
    2011-03-11 李海 1 4 25.000000000000
    2011-03-11 王明 2 4 50.000000000000
    2011-03-11 周兴 1 4 25.000000000000
    2011-03-12 王明 1 2 50.000000000000
    2011-03-12 张群 1 2 50.000000000000
    2011-03-13 李海 1 4 25.000000000000
    2011-03-13 王明 2 4 50.000000000000
    2011-03-13 周兴 1 4 25.000000000000
    */
      

  4.   

    晕,本来想给zy112429兄弟的,额~ sorry~
    用的是 二楼兄弟的SQL,多谢了。