最近碰到一个交出表问题,查了很多的资料也没有找到答案,请各位老大帮忙解决。数据库用的是SQL SERVER.问题是这样的:
我从公司的考勤卡钟读取的原始数据,数据格式及数据如下:
Sname | dt | Stime |
张三 | 2005-03-11 | 07:36:00 |
张三 | 2005-03-11 | 12:01:00 |
张三 | 2005-03-11 | 12:39:00 |
张三 | 2005-03-11 | 19:11:00 |
李四 | 2005-03-11 | 07:30:00 |
李四 | 2005-03-11 | 12:06:00 |
李四 | 2005-03-11 | 12:36:00 |
李四 | 2005-03-11 | 17:36:00 |
李四 | 2005-03-11 | 19:36:00 |
王五 | 2005-03-11 | 07:55:00 |
王五 | 2005-03-11 | 12:01:00 |
王五 | 2005-03-11 | 12:44:00 |
王五 | 2005-03-11 | 17:04:00 |
王五 | 2005-03-11 | 17:55:00 |
王五 | 2005-03-11 | 23:03:00 |
现在想通过整理后得出这样的结果:
Sname | dt | T1 | T2 | T3 | T4 | T5 | T6 | Shour |
张三 | 2005-03-11 | 07:36 | 12:01 | 12:39 | 19:11 |
|
| 10 |
李四 | 2005-03-11 | 07:30 | 12:06 | 12:36 | 17:36 | 19:36 |
| 8 |
王五 | 2005-03-11 | 07:55 | 12:01 | 12:44 | 17:04 | 17:55 | 24:03 | 14 |
此查询语句的难点主要在:1.员工打卡无固定次数,也就是说,一个员工在一天里有可能打上超过10次的记录数。像一般的交叉表都有一个固定的列名,我这个表没有。 2. Shour字段为员工实际上班时间数,超过8小时将获得加班费。但是有部分的员工可能会超日期打卡。如王五的最后一次是24:03,实际上是第二天的2005-3-12号了。
我们现在一个月大约有6万条数据,请各位老大指点。