背景:
一个任务分配系统,想统计每个员工每天处理了多少条任务,占当天比率为多少
假设基础数据如下:
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语句,非常感谢。
一个任务分配系统,想统计每个员工每天处理了多少条任务,占当天比率为多少
假设基础数据如下:
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语句,非常感谢。
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
总数=(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
(
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
*/
用的是 二楼兄弟的SQL,多谢了。