首页 > 解决方案 > 如何返回缺失日期不在主表中的缺失日期

问题描述

我正在从文本(.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

标签: sqlsql-servertsql

解决方案


推荐阅读