У меня есть таблица, в которой показаны все агенты и их руководители, и отдел:
Agent_ID | StartDate | EndDate |EmployeeID | E_Name | Team |Dept |Unique_RowID
2 08/09/2019 31/12/9999 E_ID12345 Tim Joe bloggs 1 487
14 08/09/2019 31/12/9999 E_ID12346 Dick Joe bloggs 1 488
17 08/09/2019 31/12/9999 E_ID12347 Harry Joe bloggs 1 489
19 08/09/2019 31/12/9999 E_ID12348 John Joe bloggs 1 490
20 23/08/2019 31/12/9999 E_ID12349 Pete Joe bloggs 2 491
56 08/09/2019 31/12/9999 E_ID12350 Liz Joe bloggs 1 492
Я создаю таблицу команд с сотрудниками и информацией об отделе. Таким образом, командная таблица из приведенного выше рисунка должна выглядеть следующим образом: Team, Employee, Dept
Проблема в том, что Пит в Dept2 для команды Joe BLoggs. Я пытаюсь переместить Пита в группу с другими сотрудниками, которые находятся в отделе 1. Таким образом, идея состоит в том, чтобы использовать отдел с наибольшим количеством сотрудников в качестве главного отдела, и любого сотрудника в блогах Джо, который не является главным. отдел (отдел 1) затем обновляет свой идентификатор отдела, чтобы соответствовать другим.
Конечный результат выглядит следующим образом:
Agent_ID | StartDate | EndDate |EmployeeID | E_Name | Team |Dept |Unique_RowID
2 08/09/2019 31/12/9999 E_ID12345 Tim Joe bloggs 1 487
14 08/09/2019 31/12/9999 E_ID12346 Dick Joe bloggs 1 488
17 08/09/2019 31/12/9999 E_ID12347 Harry Joe bloggs 1 489
19 08/09/2019 31/12/9999 E_ID12348 John Joe bloggs 1 490
20 23/08/2019 31/12/9999 E_ID12349 Pete Joe bloggs 1** 491
56 08/09/2019 31/12/9999 E_ID12350 Liz Joe bloggs 1 492
** выделяетизменить
Есть ли SQL-запрос, который может архивировать это? Любой указатель был бы великолепен. Спасибо
попробовал следующее:
;with cte_temp_mapping as (
select Team, Dept from
(Select RN = ROW_NUMBER() over (partition by td.team order by td.agentcount desc ) ,td.*from (select Team, Dept, count(1) as AgentCount from @tempAgent group by team, dept) td) td2
where td2.RN=1
)
,cte_team_mapping as(
select T.TeamID, T.TeamName, D.DepartmentID, d.DepartmentName,T.TenantID
from cte_temp_mapping m
join @tempTeam T on T.TeamName=m.team
join @tempDept D on D.DepartmentName=m.dept
)
SELECT distinct
a.AgentID
,TeamName
,a.EmployeeName
,DepartmentName
FROM cte_team_mapping tm
LEFT JOIN @tempAgent a ON tm.TeamName = a.team
** @ tempAgent с таблицей примеров
** @ tempDept, содержащий только deptID, отдел и команду из @ tempAgent
Это грязный запрос, предполагающий, что все сотрудники должны быть связаны только с одной командой.
Должен быть более чистый способ достижения этого?