我正在使用下面的表格结构,我想创建一个显示FirstName
ReportsTo
字段的视图。
请让我建议如何创建该视图,该视图将使用(',')逗号分隔符显示所有报告的名字。
答案 0 :(得分:1)
根据我收集的内容,我认为您正在尝试将逗号分隔的Firstname列和ReportsTo列分隔开来:
SELECT FirstName + ', ' + ReportsTo
FROM table
编辑:根据他试图做其他事情的评论判断?有人可以为我改写吗?
答案 1 :(得分:1)
SELECT E.*,
R.FirstName
FROM Employees E
JOIN Employees R
ON E.ReportsTo LIKE '%' + R.EmpCode + '%'
答案 2 :(得分:1)
您可以像其他任何联接一样将表连接到自身。这主要是为了确保两个表都有别名的别名
你的问题是你在表中存储了一对多的关系,这是一个巨大的设计错误。对于未来,请记住,只要您考虑将信息存储为逗号分隔列表,那么您做错了并需要相关的表。因此,首先必须将数据拆分到相应的表中,而不是使用两列EmplCode和ReportsTo(报告中只有一个值),然后就可以像任何其他连接一样进行连接。我们使用一个函数,你可以通过搜索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