能帮我吗,我不知道如何创建此查询。我是前端开发人员。
预期结果应为2列的表格
名称(一个)DepartmentName(许多)
表及其关系如下图所示:
答案 0 :(得分:0)
您可以使用几个INNER JOINS
来完成此操作。您无需在此查询中引用Location
表,因为Employee.LocationId
与EmployeeDepartment.LocationId
相同。
此简单查询将返回所有员工姓名和与之相关的所有部门名称。员工名称可能会重复,因为此查询仅在列中输入一个部门名称,因此,如果一个员工在两个部门中,则两次获得该员工名称。
SELECT
EmployeeName = e.Name
,DepartmentName = d.Name
FROM Employee e
INNER JOIN EmployeeDepartment ed ON ed.LocationId = e.LocationId
INNER JOIN Department d ON d.id = ed.DepartmentId
此查询稍微复杂一点,但每个员工姓名仅返回一次,部门名称将是一个用逗号分隔的名称字符串。这可以通过结合使用STUFF()
和FOR XML
来实现。
;WITH EmployeesAndDepartments AS
(
SELECT
EmployeeName = e.Name
,DepartmentName = d.Name
FROM Employee e
INNER JOIN EmployeeDepartment ed ON ed.LocationId = e.LocationId
INNER JOIN Department d ON d.id = ed.DepartmentId
)
SELECT
ead.EmployeeName
,Departments = STUFF((
SELECT ',' + DepartmentName
FROM EmployeesAndDepartments
FOR XML PATH('')
) , 1, 1, ''
)
FROM EmployeesAndDepartments ead
GROUP BY ead.EmployeeName
答案 1 :(得分:0)
这应该有效
SELECT
e.Name
, d.Name AS DepartmentName
FROM
Employee e
LEFT OUTER JOIN
EmployeeDepartment ed
ON e.LocationId = ed.LocationId
LEFT OUTER JOIN
Department d
ON ed.DepartmentId = d.id
请注意,即使他们在EmployeeDeparatment和/或Department中没有相应的记录,使用LEFT OUTER JOIN
也会返回该雇员。如果您只想检索具有相应的EmployeeDepartment和Department记录的员工,请改用INNER JOIN