问一个考勤SQL语句的问题,想查询一整月考勤记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问一个考勤SQL语句的问题,想查询一整月考勤记录相关的知识,希望对你有一定的参考价值。
有考勤表如下:
员工ID 考勤时间
001 2013-04-14 07:57:23
002 2013-04-15 08:57:23
软件中想要查询显示结果如下:
1、2、3为当月日期
想要sql查询显示如下:
试了很多方法都不是很理想,谢谢各位了!!!
a.[2] 上班时间,b.[2] 下班时间,datediff(mm,b.[2] - a.[2]) 累计时间,.......
from
( select 员工ID,上班时间 from 考勤表
pivot ( min( 考勤时间) for datepart(dd, 考勤时间) in ( [1],[2],[3],................... )) as pvt ) a,
( select 员工ID,上班时间 from 考勤表
pivot ( mxn( 考勤时间) for datepart(dd, 考勤时间) in ( [1],[2],[3],................... )) as pvt ) b
where a.员工ID = b.员工ID追问
感谢您的回复,有没有办法不用填写日期,根据选择月份来显示当月考勤明细。比如说:2月为28天,4月为30天,不修改sql语句只告诉它月份就能直接显示当月考勤明细。
追答写成动态语句,根据月的天数把每天的列拼出来
参考技术A 你这个查询只能分析出正常打卡(不多卡不缺卡)的情况,如有请个;旷工;多卡缺卡等时,你这个分析不是很到位的。我以前也这样处理过,后使用了则科人力资源管理系统,还是花点钱的实在,你也可以在当地找个好点的系统吧。 参考技术B 什么数据库,考勤时间字段什么类型?还有,怎么判断是上班或者下班?追问
数据库用的是SQL2000
考勤时间字段类型:datetime
上班下班判断,目前想取当日最早打卡为上班时间,最晚打卡为下班时间
只统计整月每天上下班时间和累计上班时间
想自动判断选择月份天数并显示当月考勤明细表
给你写了一个,有点麻烦,我只列了两天的,你可以后续把其他天也加上,代码如下
select 员工id,max(case when 上班日期=\'01\' then 上班时间 end) "1号上班时间",
max(case when 下班日期=\'01\' then 下班时间 end) "1号下班时间",
max(cast(datediff(minute,
cast((case when 上班日期=\'01\' then 上班时间 end) as datetime),
cast((case when 下班日期=\'01\' then 下班时间 end) as datetime))/60 as varchar)+\'小时\'+
cast(datediff(minute,
cast((case when 上班日期=\'01\' then 上班时间 end) as datetime),
cast((case when 下班日期=\'01\' then 下班时间 end) as datetime))%60 as varchar)+\'分\') "1号累计时间",
max(case when 上班日期=\'02\' then 上班时间 end) "2号上班时间",
max(case when 下班日期=\'02\' then 下班时间 end) "2号下班时间",
max(cast(datediff(minute,
cast((case when 上班日期=\'02\' then 上班时间 end) as datetime),
cast((case when 下班日期=\'02\' then 下班时间 end) as datetime))/60 as varchar)+\'小时\'+
cast(datediff(minute,
cast((case when 上班日期=\'02\' then 上班时间 end) as datetime),
cast((case when 下班日期=\'02\' then 下班时间 end) as datetime))%60 as varchar)+\'分\') "2号累计时间"
from
(select a.员工id,
substring(convert(varchar,a.上班时间,112),7,2) 上班日期,
substring(convert(varchar,a.上班时间,108),1,5) 上班时间,
substring(convert(varchar,a.下班时间,112),7,2) 下班日期,
substring(convert(varchar,a.下班时间,108),1,5) 下班时间
from
(select 员工id,max(考勤时间) 下班时间,min(考勤时间) 上班时间 from 考勤表
where convert(varchar(10),考勤时间,120) like \'2013-04%\'
group by 员工id,convert(varchar(10),考勤时间,120)) a) b
group by 员工id
效果在这,你要嫌麻烦我给你发附件也行
sql数据库中多个考勤打卡数据,怎样按考勤号,日期合成一条
每天有不定条数的打卡记录,我怎样才能把它们合成一条,用视图可以实现不,怎么操作
oracle:select 考勤号,日期,wm_concat(时间) from 表 group by 考勤号,日期
sql:
select stuff((select ',' + 时间
from 表
where 日期 = a.日期
and 考勤卡号 = a.考勤卡号
for XML path('')),
1,
1,
'') 工号,
考勤卡号,
日期
From 表 a
group by 考勤卡号, 日期追问
我想把时间合在一起,类似 张三 0027(卡号) 2016.03.08(日期) 07:00 11:50 13:30 (打卡时间) 这样的
参考技术A select 考勤号,日期 from biao group by 考勤号,日期以上是关于问一个考勤SQL语句的问题,想查询一整月考勤记录的主要内容,如果未能解决你的问题,请参考以下文章