日期:2014-05-17  浏览次数:20626 次

求一条关于考勤的SQL语句
有一张表:
ID  姓名  考勤时间
1   张三   2013-7-1 7:40
1   张三   2013-7-1 7:42
1   张三   2013-7-1 11:40
1   张三   2013-7-2 18:40
1   张三   2013-7-2 7:50
1   张三   2013-7-2 11:50
1   张三   2013-7-2 18:10
2   李四  2013-7-1 7:40
2   李四   2013-7-1 11:40
2   李四   2013-7-2 18:40
2   李四   2013-7-2 7:50
2   李四   2013-7-2 18:10
3   王五  2013-7-1 8:40
3   王五   2013-7-1 11:40
3   王五   2013-7-2 17:40
3   王五   2013-7-2 7:50
3   王五   2013-7-2 12:00
其中考勤时间7点到9点为早餐时间,11点到13点为中餐时间,17点到19点为晚餐时间
我想统计出张三,李四,王五个人在7月份中,早餐,中餐,晚餐的考勤情况,其中重复打卡记录过滤,例如张三在7月1日早餐出现两次打卡只取一次,即得出下表:
姓名 早餐  中餐  晚餐
张三 2     2    2
李四 2     1    2
王五 2     2     1

------解决方案--------------------
create table #tb(id int,name varchar(10),ktime datetime)
insert into #tb(id,name,ktime)
select 1 ,'张三' ,'2013-07-01 7: 40' 
union all select 1,'张三','2013-07-01 7: 42'
union all select 1,'张三','2013-07-01 11: 40'
union all select 1,'张三','2013-07-02 18: 40'
union all select 1,'张三','2013-07-02 7: 50'
union all select 1,'张三','2013-07-02 11: 50'
union all select 1,'张三','2013-07-02 18: 10'
union all select 2,'李四','2013-07-01 7: 40'
union all select 2,'李四','2013-07-01 11: 40'
union all select 2,'李四','2013-07-02 18: 40'
union all select 2,'李四','2013-07-02 7: 50'
union all select 2,'李四','2013-07-02 18: 10'