首页 > 解决方案 > 将两张表数据合二为一

问题描述

这可能很容易,但我无法弄清楚。基本上我将 C# linq 查询转换为 sql 查询以减少执行时间。但是我不擅长 sql 查询,所以我觉得很困难。这是我的两张表及其记录

HRMS_EodRecord

SELECT EmployeeId,HRMS_EodReferenceFk,ActualAmount FROM HRMS_EodRecord

结果是这样的:

EmployeeId    HRMS_EodReferenceFk    ActualAmount
   101                 1                 1000
   101                 2                  999
   101                 3                    0

还有一张桌子

HRMS_EodReference

SELECT ID FROM HRMS_EodReference

结果是这样的:

ID
1
2
3
4
5

我想像这样组合这两个表的数据和结果

 EmployeeId    HRMS_EodReferenceFk    ActualAmount
   101                 1                 1000
   101                 2                  999
   101                 3                    0
   101                 4                    0 ----From HRMS_EodReference
   101                 5                    0 ----From HRMS_EodReference

标签: sqlsql-server

解决方案


如果您只有一个员工 ID,

select 101 as EmployeeId,
       ref.ID as HRMS_EodReferenceFk
       coalesce(rec.ActualAmount, 0) as ActualAmount
from HRMS_EodReference ref left join
     HRMS_EodRecord rec 
     on rec.HRMS_EodReferenceFk = ref.ID;

不过,大概您希望同时为许多员工提供此服务。在这种情况下,使用 a 生成行cross join,然后用于left join引入现有值:

select e.EmployeeId,
       ref.ID as HRMS_EodReferenceFk
       coalesce(rec.ActualAmount, 0) as ActualAmount
from (select distinct EmployeeId
      from HRMS_EodRecord
     ) cross join
     HRMS_EodReference ref left join
     HRMS_EodRecord rec 
     on rec.EmployeeId = e.EmployeeId and
        rec.HRMS_EodReferenceFk = ref.ID;

推荐阅读