首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

-如何避免重复的下班打卡记录

2012-08-02 
高手请进---------如何处理重复的上班打卡记录?没接触过考勤这一块,帮朋友写一个报表生成的程序。。但打卡记

高手请进---------如何处理重复的上班打卡记录?
没接触过考勤这一块,帮朋友写一个报表生成的程序。。
但打卡记录很多有重复的,上午是8:00上班,下午是18:00下班。。
现在,如果打卡记录重复,要求只留上午打卡记录里最早的,和下午最晚的记录:

比如,原表Card_event:

iduser_codecard_iduser_namerecord_dateevent_timeWeekNameReason
501025613587426王玲玲 2012-5-297:20:57 二
501015613587426王玲玲 2012-5-297:20:52 二
501685613587426王玲玲 2012-5-2917:11:54二
501695613587426王玲玲 2012-5-2917:11:58 二
502075613587426王玲玲 2012-5-307:23:31 三
502635613587426王玲玲 2012-5-3017:02:43三
503105613587426王玲玲 2012-5-317:19:25 四
503895613587426王玲玲 2012-5-3117:23:24四
19394601415656386王學燕 2011-9-617:55:50二
19421601415656386王學燕 2011-9-77:51:42 三
.....

A.
求每个人,同一天里,上午打卡记录里最早的,和下午最晚的记录,如何用SQL生成以下视图?
iduser_codecard_iduser_namerecord_dateevent_timeWeekNameReason
501015613587426王玲玲 2012-5-297:20:52 二
501695613587426王玲玲 2012-5-2917:11:58 二
502075613587426王玲玲 2012-5-307:23:31 三
502635613587426王玲玲 2012-5-3017:02:43三
503105613587426王玲玲 2012-5-317:19:25 四
503895613587426王玲玲 2012-5-3117:23:24四
19394601415656386王學燕 2011-9-617:55:50二
19421601415656386王學燕 2011-9-77:51:42 三
.....

B。
求每个人,当同一天只存在上午或下午的打卡记录时,自动生成一条记录,按标准上下班时间,并在reason备注,生成以下视图:
iduser_codecard_iduser_namerecord_dateevent_timeWeekNameReason
19394601415656386王學燕 2011-9-68:00:00二 系统生成
19394601415656386王學燕 2011-9-617:55:50二
19421601415656386王學燕 2011-9-77:51:42 三
19421601415656386王學燕 2011-9-718:00:00三系统生成
.....


[解决办法]

SQL code
--> 测试数据:[test]if object_id('[test]') is not null drop table [test]create table [test]([id] int,[user_code] int,[card_id] int,[user_name] varchar(6),[record_date] date,[event_time] time(2),[WeekName] varchar(5),[Reason] sql_variant)goinsert [test]select 50102,56,13587426,'王玲玲','2012-5-29','7:20:57','二',null union allselect 50101,56,13587426,'王玲玲','2012-5-29','7:20:52','二',null union allselect 50168,56,13587426,'王玲玲','2012-5-29','17:11:54','二',null union allselect 50169,56,13587426,'王玲玲','2012-5-29','17:11:58','二',null union allselect 50207,56,13587426,'王玲玲','2012-5-30','7:23:31','三',null union allselect 50263,56,13587426,'王玲玲','2012-5-30','17:02:43','三',null union allselect 50310,56,13587426,'王玲玲','2012-5-31','7:19:25','四',null union allselect 50389,56,13587426,'王玲玲','2012-5-31','17:23:24','四',null union allselect 19394,6014,15656386,'王學燕','2011-9-6','17:55:50','二',null union allselect 19421,6014,15656386,'王學燕','2011-9-7','7:51:42','三',nullgowith tas(select px=ROW_NUMBER()over(partition by [record_date],[user_name],[user_name],[WeekName]                          order by [record_date],[event_time] asc),* from test),m as(select px=ROW_NUMBER()over(partition by [record_date],[user_name],[user_name],[WeekName]                          order by [record_date],[event_time] desc),* from test)select id,user_code,card_id,user_name,record_date,event_time,WeekName,Reason from t where px=1union select id,user_code,card_id,user_name,record_date,event_time,WeekName,Reasonfrom m where px=1/*id    user_code    card_id    user_name    record_date    event_time    WeekName    Reason19394    6014    15656386    王學燕    2011-09-06    17:55:50.00    二    NULL19421    6014    15656386    王學燕    2011-09-07    07:51:42.00    三    NULL50101    56    13587426    王玲玲    2012-05-29    07:20:52.00    二    NULL50169    56    13587426    王玲玲    2012-05-29    17:11:58.00    二    NULL50207    56    13587426    王玲玲    2012-05-30    07:23:31.00    三    NULL50263    56    13587426    王玲玲    2012-05-30    17:02:43.00    三    NULL50310    56    13587426    王玲玲    2012-05-31    07:19:25.00    四    NULL50389    56    13587426    王玲玲    2012-05-31    17:23:24.00    四    NULL*/--问题一的答案问题二的你是需要查询生成还是自动往表里添加? 

热点排行