关于考勤数据月表研究 的SQL

SQL数据库(17)
,ISNULL([KQ].[cktime],'') as cktime
,ISNULL([KQ].[cktimet],'') as cktimet
,convert(varchar(20),date,120) as date
,convert(varchar(40),Checkin,120) as Checkin
,convert(varchar(40),CheckOut,120) as CheckOut
select null as id
,null as dep
,null as cktime
,null as cktimet
,convert(varchar(7),date,120)+'月' as date ,'月汇总'
as Checkin
,convert(varchar(20),count(考勤号码)) as CheckOut
group by 考勤号码,name,convert(varchar(7),date,120) order by name,date
UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条
SELECT 语句中的列的顺序必须相同。
注释:默认地,UNION
操作符选取不同的值,即UNION是去了重的。如果允许重复的值,请使用 UNION ALL。
--查询当天:&select&*&from&info&where&DateDiff(dd,datetime,getdate())=0&
--查询24小时内:&select&*&from&info&where&DateDiff(hh,datetime,getdate())&=0&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:101201次
积分:1839
积分:1839
排名:第15248名
原创:79篇
转载:69篇
(2)(3)(1)(2)(1)(2)(9)(3)(2)(9)(10)(2)(1)(2)(4)(12)(11)(6)(6)(5)(9)(16)(1)(1)(6)(3)(13)(2)(3)(1)查看: 9047|回复: 12
关于员工考勤表设计问题,
论坛徽章:0
现在公司员工准备建立考勤系统,考勤记录存在数据库中,现在就是表如何设计,是所有记录在一个表中?利用外部程序进行编统计?
还是单个员工对应一个表?
怎么设计才对合理?& & 请高手指点。谢谢。
论坛徽章:39
员工基本信息一个表,考勤记录一个表,其他设置一个表
应该差不多了
认证徽章论坛徽章:51
偶公司的考勤是由俺建立的
可設定班次,打卡時間,等
過程很繁鎖,有很多種情況要處理,另還有些特殊情況要照顧
论坛徽章:5
要多复杂就有多复杂。
要是一般的上下班打卡计算,很容易。
其中打卡处理问题,楼主可以看看偶以前的:
《处理考勤打卡记录问题》
论坛徽章:61
原帖由 sky_chenyu 于
10:20 发表
员工基本信息一个表,考勤记录一个表,其他设置一个表
应该差不多了
打卡设置一个表,就差不多了
论坛徽章:61
也许还要考虑一个出勤历的&&什么时候算加班,加班有多少倍工资,都得设置好
论坛徽章:101
原帖由 wghao 于
13:55 发表
要多复杂就有多复杂。
要是一般的上下班打卡计算,很容易。
其中打卡处理问题,楼主可以看看偶以前的:
《处理考勤打卡记录问题》
原帖拜读 我的处理思路和你的不一样 你是格式化数据后在分析 我是分析数据后在格式化输出 估计你的效率会高点 但是 很多复杂的情况 不知道你是怎样处理 例如 错打 漏打 无效卡 另外 最想知道的是 你是怎样处理请假的 现在 对这块的思路比较混乱 不知道能否指点 不知道能否上传下原代码 不能的话能给个思路也行 多谢
论坛徽章:97
你需要的是一个考勤系统, 不是几张表就能说清楚的 ;
这个需要一定实际情况的经验,或者可以求教做HR系统的公司支持一下,这样你可能会少走一些弯路;
认证徽章论坛徽章:51
叫你公司出點錢錢,大把有經驗的可以奉獻出來
论坛徽章:35
呵呵,刚才本人完成此功能
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号一个关于考勤统计的sql研究 - 推酷
一个关于考勤统计的sql研究
& & &在这里,我们要做一个简单的员工考勤记录查询系统的后台数据库。业务需求如下所示:
&1 .统计每天来的最早、来的最晚、走的最早、走得最晚的人的姓名
&1 .1 统计每天来得最早的人的姓名和打卡时间
& & && & && &步骤1:从考勤信息表中查询出每天来得最早的人的上班打卡时间和人员编号
& & &解决这个问题的时候本来考虑的是在考勤信息记录表中按照日期对考勤信息进行分组,然后取每组中上班时间(att_work_datatime)的最小值,但是后来几经折腾发现group by只能实现分组,而order by只能实现组外排序,因此这个方法只能放弃。再三考虑了一下,可以在分组之前先对表中att_work_datatime列中的所有值进行升序排序后生成一个临时表,然后对这个临时表中的att_work_datatime按照日期再分组,这样对att_work_datatime列按照日期group by之后取的就是每天上班打卡最早的人,我们从attendance_info_table(考勤信息表)表中查询出出每天上班时间最早的人的编号、上班时间和下班时间,sql语句如下:&
& && & & &select tmp.att_work_datatime,tmp.after_work_datatime,tmp.emp_id&
& &&& & &&from
& & && & &(select id,att_work_datatime,after_work_datatime,emp_id
& & & & &&& & &&from attendance_info_table
& & & & &&& & &&order by att_work_datatime) as tmp
& & && & &&group by Date(att_work_datatime)
& & && & &执行查询结果如下:
& && & &&&
& & && & &结果并不如愿,发现多了一行null值,才发现分组的时候mysql默认将null分为一组,这样就多了一组null数据。这样我们只需要在排序之前过滤掉&&打卡时间为null的数据行,sql语句如下:
& & && & & &select tmp.att_work_datatime,tmp.after_work_datatime,tmp.emp_id
& & &&& & &&from
& & &&& & &(select id,att_work_datatime,after_work_datatime,emp_id
& & & & &&& & &&from attendance_info_table
& & & & & && & &&where att_work_datatime is not null
order by att_work_datatime) as tmp
&&&&&group by Date(att_work_datatime)
& & &查询出来的结果如下图所示:
步骤2:从员工表和考勤信息表中联结查询出每天来得最早的人的姓名上班打卡时间 & &&
&& & &这样,还没有满足需求,我们要打印的是每天来得最早的人的姓名和上班打卡时间,由于员工的信息在另外一张表employee_info_table中放着,这样我们需要用到多表联结查询,根据雇员编号进行等值联结查询,sql语句如下所示:
&select em.emp_name,tmp.att_work_datatime
&&&&&from employee_info_table as em ,
&&&&&(select id,att_work_datatime,after_work_datatime,emp_id
&&&&&&&&& from attendance_info_table
&&&& &&&&&where att_work_datatime is not null
&&&&&&&&& order by att_work_datatime )
&&&&&as tmp
&&&&&where em.id=tmp.emp_id
&&&&&group by Date(att_work_datatime)
select eit.*, ait.att_work_datatime
from attendance_info_table ait, employee_info_table eit
where ait.emp_id = eit.id and ait.att_work_datatime in
&&&& (select min(att_work_datatime)
& &&&& from attendance_info_table
&& &&&& where att_work_datatime is not null
&&&& &&&& group by Date(att_work_datatime))
order by ait.att_work_
& & &查询出来的结果如下图所示:
& & &OK,大功告成。在这里要说明的是,为了缩短sql语句并且为了在一条sql语句中多次使用相同的表,上面的查询中我们使用em&作为员工信息表employee_info_table&的表别名,使用tmp作为排序后生成的临时表的表别名。
& 1.2 统计每天来得最晚的人的姓名和打卡时间
& & &步骤和2.1中统计每天来的最早的人的方法相同,唯一不同的是分组之前先对表中att_work_datatime列中的所有值进行降序排序,sql语句如下:
& && &select em.emp_name,tmp.att_work_datatime&
&&&&&from employee_info_table as em ,
&&&&&(select id,att_work_datatime,after_work_datatime,emp_id
&&&&&&&&& from attendance_info_table
&&&&&&&&& where att_work_datatime is not null
&&&&&&&&& order by att_work_datatime desc)
&&&&&as tmp
&&&&&where em.id=tmp.emp_id
&&&&&group by Date(att_work_datatime)
select eit.*, ait.att_work_datatime&
from attendance_info_table ait, employee_info_table eit
where ait.emp_id = eit.id and ait.att_work_datatime in
&&&& (select max(att_work_datatime)&
&&&& from attendance_info_table&
&&&& where att_work_datatime is not null&
&&&& group by Date(att_work_datatime))
order by ait.att_work_
& & &执行查询的结果如下:
& & && 1.3 统计每天走得最早的人的姓名和打卡时间
& & & & &&& &步骤和2.1中统计每天来的最早的人的方法相同,唯一不同的是对表中列中after_work_datatime的所有值进行升 & 序排序,并将查询的列由att_work_datatime改为after_work_datatime,sql语句如下:
& & & & & &select em.emp_name,tmp.after_work_datatime&
&&&&&&&&&&from employee_info_table as em ,
&&&&&&&&&&(select id,att_work_datatime,after_work_datatime,emp_id
&&&& &&&&&&&&&&from attendance_info_table
&&&& &&&&&&&&&&where after_work_datatime is not null
&&&&&&&&&&&&&& order by after_work_datatime)
&&&&&&&&&&as tmp
&&&&&&&&&&where em.id=tmp.emp_id
&&&&&&&&&&group by Date(after_work_datatime)
select eit.*, ait.after_work_datatime&
from attendance_info_table ait, employee_info_table eit
where ait.emp_id = eit.id and ait.after_work_datatime in&
&&&& (select min(after_work_datatime)
&&&& from attendance_info_table
&&&& where after_work_datatime is not null
&&&& group by Date(after_work_datatime))
order by ait.after_work_
& & &查询结果如下:
& & &&&&&&
&&&&&& 1.4 统计每天走得最晚的人的姓名和打卡时间
&&&&&&&&&&&步骤和2.2中统计每天来的最晚的人的方法相同,唯一不同的是对表中列中after_work_datatime的所有值进行降序排序,并将查询的列由att_work_datatime改为after_work_datatime,sql语句如下:
& && &select em.emp_name,tmp.after_work_datatime&
&&&&&from employee_info_table as em ,
&&&&&(select id,att_work_datatime,after_work_datatime,emp_id
&&&& &&&&&from attendance_info_table
&&&& &&&&&where after_work_datatime is not null
&&&& &&&&&order by after_work_datatime desc)
&&&&&as tmp
&&&&&where em.id=tmp.emp_id
&&&&&group by Date(after_work_datatime)
select eit.*, ait.after_work_datatime
from attendance_info_table ait, employee_info_table eit
where ait.emp_id = eit.id and ait.after_work_datatime in
&&&& (select max(after_work_datatime)
&&&& from attendance_info_table
&&&& where after_work_datatime is not null
&&&& group by Date(after_work_datatime))
order by ait.after_work_
& & &查询结果如下:
.统 计每天工作时间最长、工作时间最短的人的姓名
2.1统计每天工作时间最长的人的姓名
& & && & & 步骤1:从考勤信息表中查询出每天工作时间最长的人的编号和工作时长
& & && & & 解决这个问题,我们需要建立在问题1解决方法的基础上,我们先取出考
勤信息表中上班打卡时间 att_work_datatime 、下班打卡时 & & & & &间 after_work_datatime 、上下班打卡时间之差作为一天的工作时长att_time以及员工编号emp_id生成一个临时表tmp并将打卡时间为null的数据过滤掉,然后对tmp表中的att_time进行降序排 序然后根据日期进行分组,这样 我们就可以从attendance_info_table(考勤信息表)表中查询出每天工作时间最长的人的编号和此人的工作时长。为了计算两个时间差,我们使用mysql自带的函数timediff(time1,time2)来计算time1-time2的时长。sql语句如下:
& & && & && & & select tmp.att_time,tmp.emp_id
& & &&& & &&& &from
& & && & && & &(select id,att_work_datatime,after_work_datatime,timediff(after_work_datatime,att_work_datatime) as att_time,emp_id
& & & & && & && & &&from attendance_info_table
& & & & && & && & &&where att_work_datatime is not null and after_work_datatime is not null
& & & && & &&& & &&order by att_time desc) as tmp
& & && & &&& & &&group by Date(att_work_datatime)
& & && & && & && &查询出的结果如下图所示:
& & && & && & && &&
& & && & && & &
步骤2:从考勤信息表和员工表中利用等值联结查询出每天工作时间最长的人的姓名和工作时长
& & && & &
我们根据雇员编号进行等值联结查询出每天工作时间最长的人的姓名和工作时长,sql语句如下所示:
select eit.*,tmp.att_time, tmp.att_work_datatime
from employee_info_table eit,
&&&& (select id,att_work_datatime,timediff(after_work_datatime,att_work_datatime) as att_time,emp_id
&&&& from attendance_info_table
&&&& where att_work_datatime is not null and after_work_datatime is not null) as tmp
where eit.id=tmp.emp_id and tmp.att_time in
(select max(timediff(after_work_datatime,att_work_datatime)) as att_time&&&
&&&&&&& from attendance_info_table
&&&&&&& where att_work_datatime is not null and after_work_datatime is not null
&&&& group by date(att_work_datatime))
group by date(tmp.att_work_datatime)
order by att_work_
执行出的结果如下图所示:
& & &&& & &&
2.2统计每天工作时间最短的人的姓名
select eit.*,tmp.att_time, tmp.att_work_datatime
from employee_info_table eit,
&&&& (select id,att_work_datatime,timediff(after_work_datatime,att_work_datatime) as att_time,emp_id
&&&& from attendance_info_table
&&&& where att_work_datatime is not null and after_work_datatime is not null) as tmp
where eit.id=tmp.emp_id and tmp.att_time in
(select min(timediff(after_work_datatime,att_work_datatime)) as att_time&&&&
&&&&&&& from attendance_info_table
&&&&&&& where att_work_datatime is not null and after_work_datatime is not null
&&&& group by date(att_work_datatime))
group by date(tmp.att_work_datatime)
order by att_work_
& & && & &执行结果如下所示:
& && & &&&
3.统计每天迟到的人数、早退的人数
3.1统计每天迟到的人数
select date(att_work_datatime) as date,count(*)& as late_nums
from attendance_info_table
where timediff(time(att_work_datatime),'09:30:59') & 0 and att_work_datatime is not null
group by date(att_work_datatime)
& & &执行结果如下图所示:
3.2统计每天早退的人数
select date(after_work_datatime) as date,count(*)& as leave_early_nums
from attendance_info_table
where after_work_datatime is not null
&&&& and timediff(time(after_work_datatime),'18:00:00')&0
&&&& or timediff(after_work_datatime,att_work_datatime)&'08:00:00'
group by date(after_work_datatime)& & &&
执行结果如下图所示:
4.统计每个月迟到的人按迟到次数降序排序
select eit.*, count(*) as late_nums
from attendance_info_table as ait,employee_info_table as eit
where ait.att_work_datatime is not null
&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&& and ait.emp_id = eit.id&&&
group by emp_id
order by& late_
& & && & &执行结果如下:
5.统计出迟到的人并按姓名按升序排序,打印出迟到的时间
select eit.*,timediff(time(ait.att_work_datatime),'09:30:59') as lately_times,date(ait.att_work_datatime) as lately_date
from attendance_info_table as ait,employee_info_table as eit
where ait.att_work_datatime is not null
&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&& and eit.id=ait.emp_id
order by eit.emp_
执行结果如下:
6.公司规定:每迟到一次扣10块钱,每分钟扣1块钱,计算出每天迟到的人扣的钱和公司一天因为迟到扣的钱的总数
6.1计算出每天迟到的人扣的钱
select eit.*,timediff(time(ait.att_work_datatime),'09:30:59') as lately_times,date(ait.att_work_datatime) as lately_date,(10+1*(TIME_TO_SEC(timediff(time(ait.att_work_datatime),'09:30:59')))/60) as '罚金(元)'
from attendance_info_table as ait,employee_info_table as eit
where ait.att_work_datatime is not null
&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&& and eit.id=ait.emp_id
order by eit.emp_name asc
执行结果如下:
6.1计算出公司每天因为迟到所扣的钱
select tmp.lately_date,sum(tmp.fadefor)& as '总罚金(元)'
&&&& (select eit.*,timediff(time(ait.att_work_datatime),'09:30:59') as lately_times,date(ait.att_work_datatime) as lately_date,(10+1*(TIME_TO_SEC(timediff(time(ait.att_work_datatime),'09:30:59')))/60) as fadefor
&&&& from attendance_info_table as ait,employee_info_table as eit
&&&& where ait.att_work_datatime is not null
&&&&&&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&&&&&&& and eit.id=ait.emp_id
&&&& order by eit.emp_name asc) as tmp
group by& tmp.lately_date
执行结果如下:
7.统计出每个月每个人因为迟到扣多少钱,按扣的钱数降序排序列出名单
& & & 步骤一:统计出每个人每天迟到的时间并计算每个人每天的罚金
& & && & & 方法同6.1
& &步骤二:根据人员编号进行分组,统计每个人每个月所扣的钱,并排序
select tmp.id,tmp.emp_name,sum(tmp.fadefor) as 'total_fadefor' from
&&&& (select eit.*,(10+1*(TIME_TO_SEC(timediff(time(ait.att_work_datatime),'09:30:59')))/60) as 'fadefor'
&&&& from attendance_info_table as ait,employee_info_table as eit
&&&& where ait.att_work_datatime is not null
&&&&&&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&&&&&&& and eit.id=ait.emp_id) as tmp
group by tmp.id
order by total_&&&&
& & & & &&
& & && & && 查询结果如下:
& & & & &&
& &8.列举出既没有迟到也没有早退记录的人的名单
步骤一:统计出每个人每个月正常出勤的天数
select eit.*,count(*) as normal_nums
from attendance_info_table as ait,employee_info_table as eit
where ait.att_work_datatime is not null
&&&& and ait.after_work_datatime is not null
&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&& and timediff(after_work_datatime,att_work_datatime)&'08:00:00'
&&&& and ait.emp_id = eit.id&&&&
group by ait.emp_id
步骤2:查询出出勤次数大于指定天数的人的名单
select tmp.id,tmp.emp_name from
(select eit.*,count(*) as normal_nums
from attendance_info_table as ait,employee_info_table as eit
where ait.att_work_datatime is not null
&&&& and ait.after_work_datatime is not null
&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&& and timediff(after_work_datatime,att_work_datatime)&'08:00:00'
&&&& and ait.emp_id = eit.id
group by ait.emp_id
)as tmp where tmp.normal_nums&=21&
步骤三:通过获取一个月的天数,查询出一个月每天都正常出勤的人的名单
select tmp.id,tmp.emp_name from
(select eit.*,count(*) as normal_nums
from attendance_info_table as ait,employee_info_table as eit
where ait.att_work_datatime is not null
&&&& and ait.after_work_datatime is not null
&&&& and timediff(time(ait.att_work_datatime),'09:30:59') & 0
&&&& and timediff(after_work_datatime,att_work_datatime)&'08:00:00'
&&&& and ait.emp_id = eit.id
group by ait.emp_id
where tmp.normal_nums&=
(select count(*)
&&&& (select date(att_work_datatime)& as date
&&&& from attendance_info_table
&&&& where att_work_datatime is not null
&&&& group by date(att_work_datatime)) as tmp)
执行结果如下:
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致sql 考勤数据 未打卡的日期问题_百度知道
sql 考勤数据 未打卡的日期问题
com/zhidao/wh%3D450%2C600/sign=3dd38bc33f6d55fbc37c/ac4bd1eb762249fbfbedab641bb5.hiphotos,我用水晶报表做了个report.baidu,基本都做好了。有一个表,要实现每个人每个月的出勤记录.baidu.hiphotos。.com/zhidao/wh%3D600%2C800/sign=ecec08fa2de1155/ac4bd1eb762249fbfbedab641bb5。,怎么能也让这一天显示在报表里面呀.hiphotos,里面有所有的打卡记录,9-23几天数据库里没有记录小弟初学没多久,sql里面没有记录的.jpg" esrc="http.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http。,9-16,唯一的问题是如果某人某天没打卡,先谢谢了:00,如何让这几天在报表或者sql里面显示出来,希望各位指点一下小弟://d.com/zhidao/pic/item/ac4bd1eb762249fbfbedab641bb5,多谢了,让没打卡的日期上下班时间一律显示00,9-14。://d.baidu,如下图://d。<a href="http,9-12
提问者采纳
&#39,&#39;.dt+&#39,&#39;5&#39第一个是sqlserver的;00009&#39.dt+&#39;5&#39,&#39;t4select&:37&#39,&#39;&nbsp,t1:0009 &&#39;when&08;08.dt=substring(t4,&#39,&#39,case&and&00009&#39;allselect&;t1;from&;union&5&#39;insert&4618&#39,case&--oracleselect&08;else&08,&#39:37&#39;08;;&t1;allselect&nbsp,0,&#39;substring(t4;union&nbsp:0009 &&&&#39;&#39;0&#39,&#39;allselect&on&varchar(1).dt=substr(t4;,&#39;0&#39;;&08,cardno from tabname(tabname就是你上面那张表)来替代t5;&nbsp,&#39;18;08:37&#39,&#39;19;t1;18;18;t4;&;;00009&#39;;t1;18;into&nbsp:37 &end&00009&#39;union&then&t1;t1;;:37&#39;end_timefrom(select&table&nbsp:37&#39;varchar(20);&&#39:02&#39;t4,&#39;union&.end_00:37 &nbsp:00 &nbsp,0;end_timefrom(select&union&nbsp:37&#39;:00NULL 5 -09-12&;into&&#39:00&#39;00009&#39,&#39;;t1.end_time&nbsp,&#39;union&&&nbsp:00&#39:37 &nbsp,&#39,&#39;varchar(10));5&#39:45&#39;;varchar(1);;&then&:0309 &nbsp.start_time&nbsp,10)&;allselect&18,plan_id&00009&#39;allselect&nbsp,11) dt.dt||&#39;t4&,10)=t1,11)=t1;from&nbsp:37&#39;&nbsp,&#39,0;;0NULL 5 -09-16&&#39.cardno=t4;t4;5&#39;&5&#39,所以select distinct substring(start_&nbsp,cardno&substr(t4;00009&#39;union&08;create&union&00:37&#39;allselect&nbsp,&#39;t1;substring(start_&nbsp,&#39;08,11)&and&&#39;&&#39;18,t1,望采纳;t4(&nbsp.end_time&&nbsp.cardnoorder&00;00;else&:00&#39;&allselect&0;start_union&nbsp:37&#39;;08;&00009&#39,&#39,&#39;5&#39:37&#39.start_4617&#39,t1,&#39;;08:53 &nbsp:37&#39;;5&#39.dt&,&#39,我这里建的t5是因为没有完整的表记录;on&00;allselect&5&#39,第二个是oracle的:01NULL 5 -09-14&t1;&nbsp.start_time.,&#39,取不到完整的时间:53&#39;08;&#39;&nbsp,&#39;t1;t4&&#39;&union&,&#39;00009&#39;allselect&join&nbsp,&#39;;,&#39:45&#39;&nbsp,10)=t1;;&#39;0,&#39;:09 &;&#39;;&union&013&#39,&#39,&#39.dt||&#39;substr(start_union&distinct&then&nbsp:35&#39;00;&5&#39;varchar(10):54 &nbsp:00&#39;;5&#39;;allselect&;&else&dt,&#39:00 &:0009 &nbsp:54&#39,0;5&#39,&#39;union&;;&&nbsp,cardno&&#39;allselect&;00,11)&nbsp,11) dt,11)=t1,plan_id&nbsp:00NULL 5 -09-22&&#39;08;allselect&nbsp:01&#39;&#39;when&00009&#39;when&t4;5&#39;,t1,plan_id,0;&nbsp,&#39;02-09-23&08;varchar(20);&08;end&;union&&nbsp,而你这里的表有完整的记录;08:30&#39;&#39;by&&#39:37&#39:37&#39;&nbsp,start_time&nbsp,&#39:37&#39;08;5&#39;allselect&start_time,case&nbsp,&#39;&#39:30 &nbsp,&#39;0&#39,&#39.cardnoorder&5&#39;00:0009 &nbsp:37&#39,&#39;0有问题再追问吧,&#39,&#39;&nbsp,&#39.start_time:37 &;08;&08;;5&#39,&#39.dt&,&#39;08,plan_end&5&#39;00;attend_id&nbsp.plan_5&#39;18;&#39.plan_id,&#39.dt&by&;allselect&结果.&t4;&0;08;08,nullunion&nbsp.cardno,&#39.5&#39;08:37&#39.dt&nbsp,&#39;allselect&nbsp,&#39:00 &00009&#39.start_time&--sqlserver语句select&nbsp,plan_id,&#39;allselect&nbsp,&#39;union&nbsp,这样可以取出完整的时间集合,&#39;08;;;00;08;allselect&;2-09-11&nbsp,&#39;allselect&&#39;0;union&union&union&nbsp,0;:4509 &;;00;00;&nbsp.attend_distinct&nbsp,呵呵;08;&nbsp:37 &08.end_time,cardNo&&allselect&nbsp:37&#39;,cardNo&,&#39;allselect&nbsp,总不会出现所有人上班时间都没来吧;union&nbsp,&#39;insert&nbsp.start_5&#39;substr(t4;&#39;t5select&&#39,&#39;,case&nbsp,&#39;;;;union&t5(start_time&08,&#39;varchar(20))。create&00;;t5)t1left&nbsp,&#39;,&#39,cardno from t5这句完全可以select distinct substring(start_time,0;;allselect&nbsp:37&#39;end&.attend_0 &allselect&&t5)t1left&08:35NULL 5 -09-24&varchar(4);;then&&nbsp,10)&nbsp:00 &;else&when&,end_time&;&nbsp:37&#39,&#39;0&#39;5&#39;t4,nullunion&nbsp:03&#39;&#39;&#39,0;table&nbsp,&#39;&18;00;09 &08,&#39,&#39;19;18;substring(t4;18.cardno=t4;&join&nbsp,plan_5&#39
提问者评价
其他类似问题
为您推荐:
其他1条回答
功能强大,你可以下载试用下。这样,主打产品为庆丰人事考勤工资管理系统,没有就为空,对于每一天。我们是深圳庆丰软件工作室,有考勤才有数据你可以先做个临时表,然后插入1-31日的日期空记录(最大日期处决于自然月的最大日期),然后将人员考勤记录依次按对应字段插入至临时表中
打卡的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 年上起月表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信