合并记录
数据表
姓名 日期 考勤时间
a 2012-7-26 08:00:00
a 2012-7-26 12:01:03
b 2012-7-12 06:02:04
在程序中显示
姓名 日期 时间1 时间2 时间3 时间4
a 2012-7-26 08:00:00 12:01:03
b 2012-7-12 06:02:04
请问怎样在VB中实现?
[解决办法]
用sql语句或视图直接绑定
if object_id('t') is not null drop table tgocreate table t(姓名 varchar(20),日期 varchar(10),考勤时间 varchar(8))insert into t values('a','2012-7-26','08:00:00');insert into t values('a','2012-7-26','12:01:03');insert into t values('b','2012-7-12','06:02:04');select 姓名,日期, max(case rn when 1 then 考勤时间 else '' end) 时间1, max(case rn when 2 then 考勤时间 else '' end) 时间2, max(case rn when 3 then 考勤时间 else '' end) 时间3, max(case rn when 4 then 考勤时间 else '' end) 时间4from (select row_number() over (partition by 姓名,日期 order by 姓名,日期,考勤时间) rn,姓名,日期,考勤时间 from t) t1group by 姓名,日期order by 姓名,日期;go
[解决办法]
感觉你这个需求,弄出复杂的sql好像意义不大,何不先
select * from 数据表 order by 姓名,日期,考勤时间
然后按序遍历,用VB代码分析字段值的变化,按相应要求显示就得了
[解决办法]
是做考勤程序吗?没这么简单。
用户可能刷了很多次卡,比如早晨刷了两次甚至三次,中午也刷了不止一次。
实际上,考勤程序要分析员工刷卡时间,按时间段做大量判断,需要员工出勤时间表的配合。例如,对某一员工的上班时段,取其最晚的一次;下班时段取其时间最早的一次。如果上班时段没有打卡记录,可能要在班中时间搜寻达卡记录,判断迟到。如果在下班时段没有打卡机路,首先根据加班表判断是否加班,如果没有加班安排记录,再查是否早退,如无,可能判断未达卡。
因此,通过分析,每一次有效的打卡记录都会定位到上班、下班、加班、迟到、早退等,写入员工考勤记录表。
你这样的交叉表查询难以适应特殊情况。