如何 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
我正在尝试检查一个人的姓名是否在 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