Перераспределение сотрудника в лидера команды с большинством сотрудников под ним / ней - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть таблица, в которой показаны все агенты и их руководители, и отдел:

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

Это грязный запрос, предполагающий, что все сотрудники должны быть связаны только с одной командой.

Должен быть более чистый способ достижения этого?

...