我有一个存储过程,它检索所有员工的角色,称为GetAllRoles
。 我将从此存储过程生成的数据插入到临时表中,如下所示:
临时表的创建 #RoleTemp:
CREATE TABLE #RoleTemp (
EmployeeId INT ,
EmployeeRoleId int,
EntityRoleId int,
ValueId int ,
[RoleLabel] VARCHAR(255),
SecurityIdentifier VARCHAR(250) ,
[Role] NVARCHAR(MAX),
RoleAccess VARCHAR(255)
)
人口 #RoleTemp 表:
INSERT INTO #RoleTemp
EXEC GetAllEmployeeRoles
我想加入 #RoleTemp 和Employee_RoleHistory表,如下所示:
SELECT rt.EmployeeId,erh.RoleId,erh.CreatedDate AS StartDate,erh.RemovedDate AS EndDate FROM #RoleTemp rt
LEFT JOIN Employee_RoleHistory erh ON rt.EntityRoleId=erh.RoleId
WHERE rt.EmployeeId=5625
而不是为每个角色获取开始日期和结束日期:
EmployeeId RoleId StartDate EndDate
5625 23 2016-07-12 11:12:33.4900000 6973 2019-01-07 10:29:25.3900000
5625 25 2019-07-12 11:12:33.4900000 6973 NULL
5625 233 2018-09-23 11:12:33.4900000 6973 NULL
... ... ... ...
我得到的结果是每个角色重复多次,如下所示:
EmployeeId RoleId StartDate EndDate
5625 23 2016-07-12 11:12:33.4900000 6973 NULL
5625 23 2016-07-12 11:12:33.4900000 6973 NULL
5625 23 2016-07-12 11:12:33.4900000 6973 NULL
... ... ... ...
尝试了解表与重复的真正原因的关系,并通过添加适当的ON
条件来背诵它。
如果没有任何效果,那就去DISTINCT
使用DISTINCT
条款
SELECT DISTINCT rt.EmployeeId, erh.RoleId, erh.CreatedDate AS StartDate,erh.RemovedDate AS EndDate
FROM #RoleTemp rt LEFT JOIN Employee_RoleHistory erh ON rt.EntityRoleId=erh.RoleId
WHERE rt.EmployeeId = 5625