sql - 如何返回缺失日期不在主表中的缺失日期
问题描述
我正在从文本(.txt)文件将数据导入数据库表。因为这个文本文件只有考勤数据,例如如果有人在当天出席或将他的身份证交换到考勤设备,则只会保存当天的数据。现在我正在尝试以一种方式导出/表示数据,如果有人不提供他的数据,则查询必须返回所有值应该显示为“他的 ID 和出勤日将显示,但输入/输出时间为零或空值”
我已经尝试过 UNION/UNION ALL 和 JOIN 但我的结果不符合我的期望。
我得到的结果: -
我预期的结果:-
AttendDate | Emplid | EmplName | OutTime | InTime
2019-06-27 | SAO-21-001| Suman Mondol| 14:53:47 |13:28:34
2019-06-27 | SAO-21-001| Suman Mondol| 00:00:00 |00:00:00
2019-06-29 | SAO-21-001| Suman Mondol| 13:17:12 |9:08:48
我已经尝试过以下查询:
Select distinct c.Date as Attendate
,t.EmplId
,t.Name
,t.AttendTimeMax
,t.AttendTimeMin
from AccessAttenHO t Right Outer JOin dbo.HRCalendar c on t.AttendDate=c.Date
where c.Date between '2019-06-01' and '2019-06-30'
order by t.EmplId;
和主表“ AccessAttenHO ”填充数据如下:
Insert into AccessAttenHO(EmplId,Name,AttendDate,AttendTimeMax,AttendTimeMin, IsLate,UserId,TranDate,BranId,AttendType,DeptId)
select HREmployee.emplid,
HREmployee.EmplFirstName,
TempAttendImport.AttendDate,
MAX(CAST(TempAttendImport.AttendTime as time))maxtime,
MIN(CAST(TempAttendImport.AttendTime as time))mintime,
(case
when HREmployee.AttendType='General' and (MIN(cast(AttendTime as time))) >=CAST('09:16:00' AS time)
THEN 'T'
ELSE 'F'
END) ISLATE , TempAttendImport.UserId,TempAttendImport.TrnsDate,HREmployee.BranId,HREmployee.AttendType,HREmployee.DeptId
from TempAttendImport, HREmployee
where TempAttendImport.EmplId =HREmployee.IDCARDNO
group by HREmployee.emplid,TempAttendImport.AttendDate,HREmployee.EmplFirstName, HREmployee.AttendType,TempAttendImport.UserId,TempAttendImport.TrnsDate,HREmployee.BranId,HREmployee.AttendType,HREmployee.DeptId
ORDER BY HREmployee.emplid
解决方案
推荐阅读
- excel - 在活动单元格下的表格中添加一行
- c# - 使用附加属性从 View 更新 ViewModel
- python - python - 如何检查df中所有列的dtypes在python中是否相同?
- sql - 在 ClickHouse 中将列数据透视到 NxM 表中
- netsuite - 我们如何从记录顶部删除/更改销售订单状态的标签?
- webrtc - 从源头构建 Jitsi 的令人费解的斗争
- go - 编写具有多个可选参数的 API 端点
- python - 在 Django 模板中的对象内加载对象
- azure-data-factory - 获取文件中查找活动的输出
- javascript - 响应式菜单的 JS 和 Bootstrap?