您将一个表连接到自身,就像任何其他连接一样。主要是确保两个表都使用不同的别名
您的问题是您在表中存储了一对多的关系,这是一个巨大的设计错误。对于未来,请记住,每当您考虑将信息存储为逗号分隔的列表时,那么您做错了,需要一个相关的表来代替。因此,首先您必须将数据拆分到您应该拥有的相关表中,而不是使用两列,EmplCode 和 ReportsTo(在报告中只有一个值),然后您可以像任何其他联接一样进行联接。当我们在客户端文件中获得此类信息时,我们使用您可以通过在 Internet 上搜索获得的功能 fn_split 来拆分此类表。
如果你搜索到 fn_split,那么你可以这样应用它:
Create table #UnsplitData (EmpCode varchar (10), ReportsTo varchar(20), FirstName varchar (10))
insert into #UnsplitData
values ('emp_0101', 'emp_0102,emp_0103', 'John')
, ('emp_0102', 'emp_0103', 'Sally')
, ('emp_0103', Null, 'Steve')
select *, employee.FirstName + ', ' + Reports.FirstName
from #UnsplitData Employee
join
(
select t.EmpCode , split.value as Reportsto, ReportName.Firstname
from #UnsplitData t
cross apply dbo.fn_Split( ReportsTo, ',') split
join #UnsplitData ReportName
on ReportName.EmpCode = split.value
) Reports
On Employee.EmpCode = Reports.empcode