SQL关联demand与FTE表计算差值出现9条冗余记录问题求解
问题原因
- 你的SQL语句在关联
tblDemand和tblActual_FTE两张表时,仅使用了DepartmentID作为关联条件,没有关联班次字段shift,导致demand表的3条班次记录和FTE表的3条班次记录产生笛卡尔积,最终返回3*3=9条错误结果。 - 补充说明:如果存在某个班次仅有需求数据无FTE数据、或仅有FTE数据无需求数据的场景,你当前使用的右连接可能会返回Null值,可根据实际业务需求调整连接类型。
修改后可正确运行的SQL
select dp.[Department], dm.[shift], (dm.Demand - ft.fte) as Need from [tblDepartment] dp inner join tblDemand dm on dp.[DepartmentID] = dm.[DepartmentID] inner join [tblActual_FTE] ft on ft.[DepartmentID] = dm.[DepartmentID] and ft.[shift] = dm.[shift] where dp.Department = 'screw ii'
修改点说明
- 调整了表的关联顺序,从部门表出发关联业务表逻辑更清晰
- 在
tblDemand和tblActual_FTE的关联条件中新增了shift字段匹配,确保同部门同班次的需求和FTE一一对应,避免笛卡尔积 - 可根据业务需要调整连接类型:如果需要保留只有需求没有FTE的记录,将和FTE表的连接改为
left join即可,缺口计算时可以用ISNULL函数处理Null值,示例:dm.Demand - ISNULL(ft.fte, 0)
内容的提问来源于stack exchange,提问作者davidthomasboyd
相关产品推荐
相关产品推荐

