根据下列条件写成一个SQL语句
发布网友
发布时间:2024-10-02 06:32
我来回答
共1个回答
热心网友
时间:2024-12-04 03:19
其实并不复杂,只是三个表的关联,加上函数而已,SQL可以写成如下:
select b.父级部门名称,a.姓名,convert(nvarchar(15),c.考勤时间,23)as '考勤日期',
case when c.考勤时间<=cast(convert(varchar(10),getdate(),120)+' 12:00:00'as datetime)then c.考勤时间 else null end as '上班考勤时间', case when c.考勤时间>cast(convert(varchar(10),getdate(),120)+' 12:00:00'as datetime)then c.考勤时间 else null end as '下班考勤时间',c.考勤机,datename(dw,c.考勤时间 )as'星期几' from 用户表 a
join (--得到父级部门
select a.部门ID,a.父级部门ID,a.部门名称, b.部门名称 as '父级部门名称' from 部门表 a
join 部门表 b
on a.父级部门ID=b.部门ID) b
on a.部门ID=b.部门ID
left join 考勤表 c
on a.用户ID=b.用户ID
where convert(nvarchar(15),c.考勤时间,23)>=@开始时间 and convert(nvarchar(15),c.考勤时间,23)<=@结束时间 and b.父级部门名称=@父级部门名称
其中带有@的全部都是参数。建议写成存储过程。存储过程就在我写的之前加上创建存储过程命令还有变量定义就可以了。不懂可以追问。
另外,你没有说明上班时间和下班时间,我自定义的规则是,如果打卡时间在中午12点之前,定义为上班时间,否则是下班时间。
不懂的可以追问