如何 SELECT 来自 3 个 JOINED 表的唯一行

How to SELECT unique rows from 3 JOINED tables

我正在尝试检查一个人的姓名是否在 table 中多次出现,并提取其他信息(职位名称、部门名称、员工编号)以限制创建两个存储过程 1. 检查是否名称出现多次,并且 2. 在检查完成后获取附加信息。

我现在的查询如下,其中 returns 多行作为我用来加入 table 的 ID 在一个 table 中多次出现(一名员工可以属于多个部门,EmpID在这里出现多次,返回多个值。

SELECT c.FirstName+ ' ' + c.LastName as emp_full_name, e.EmployeeNumber,
       e.EmpID, dh.PositionTitle, d.Name as deptName, e.isActive

FROM Person.Contact c

INNER JOIN HumanResources.Employee e ON c.ContactID = e.ContactID
INNER JOIN HumanResources.EmployeeDepartmentHistory dh ON e.EmpID = dh.EmpID
INNER JOIN HumanResources.Department d ON dh.DepartmentID = d.DepartmentID

WHERE c.FirstName+ ' ' + c.LastName LIKE @empName

我的大体table结构如下:

Person.Contact

联系人ID

名字

姓氏

HumanResources.Employee

员工 ID

员工人数

有效

HumanResources.Employee部门历史

DepartmentHistoryId

员工 ID

部门编号

职位

HumanResources.Department

部门编号

姓名

示例结果集:

John Doe 1234567  1 Database Architect Administration    A
John Doe 1234567  1 Database Tester    Administration    A

使用不同的关键字

SELECT distinct c.FirstName+ ' ' + c.LastName as emp_full_name, e.EmployeeNumber,
       e.EmpID, STUFF((
      SELECT ',' + edh.PositionTitle
      FROM dbo.EmployeeDepartmentHistory edh
      WHERE edh.EmpID = e.EmpID
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''), e.isActive

FROM Person.Contact c

INNER JOIN HumanResources.Employee e ON c.ContactID = e.ContactID
INNER JOIN HumanResources.EmployeeDepartmentHistory dh ON e.EmpID = dh.EmpID
INNER JOIN HumanResources.Department d ON dh.DepartmentID = d.DepartmentID

WHERE c.FirstName+ ' ' + c.LastName LIKE @empName
Group By e.EmpID