首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

合拢记录

2012-12-30 
合并记录数据表 姓名日期考勤时间 a2012-7-2608:00:00 a2012-7-2612:01:03 b2012-7-1206:02:04 在程序中显

合并记录
数据表 
姓名       日期        考勤时间 
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 t
go
create 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) 时间4
from 
(select row_number() over (partition by 姓名,日期 
order by 姓名,日期,考勤时间) rn,姓名,日期,考勤时间 from t) t1
group by 姓名,日期
order by 姓名,日期;
go

[解决办法]
感觉你这个需求,弄出复杂的sql好像意义不大,何不先
select * from 数据表 order by 姓名,日期,考勤时间

然后按序遍历,用VB代码分析字段值的变化,按相应要求显示就得了
[解决办法]

是做考勤程序吗?没这么简单。

用户可能刷了很多次卡,比如早晨刷了两次甚至三次,中午也刷了不止一次。

实际上,考勤程序要分析员工刷卡时间,按时间段做大量判断,需要员工出勤时间表的配合。例如,对某一员工的上班时段,取其最晚的一次;下班时段取其时间最早的一次。如果上班时段没有打卡记录,可能要在班中时间搜寻达卡记录,判断迟到。如果在下班时段没有打卡机路,首先根据加班表判断是否加班,如果没有加班安排记录,再查是否早退,如无,可能判断未达卡。

因此,通过分析,每一次有效的打卡记录都会定位到上班、下班、加班、迟到、早退等,写入员工考勤记录表。

你这样的交叉表查询难以适应特殊情况。

热点排行