我有2个表,用于保存Empolyee和Office数据:
EMPLOYEE (EmpID, Role, OfficeNumber)
OFFICE (OfficeNumber, Region, Manager)
员工可以在多个不同职位的办事处注册。
例如,下面的员工在2个办事处(20& 50)注册,但在办公室20有更多的条目,所以我们想选择那个作为他的“家庭”办公室
EmpID | Role | Region | Manager | OfficeNumber
15 | 1 | East | James | 20
15 | 4 | East | James | 20
15 | 5 | East | James | 20
15 | 1 | West | George | 50
15 | 5 | West | George | 50
基本上我想知道该员工在该地区注册的办公室最多,然后返回该办公室的经理。
因此,对于上述员工,他们的“内政部”的结果将是:
EmpID | Region | Manager | OfficeNumber
15 | East | James | 20
这是我放在一起的SQL。
SELECT
EmpID, Manager, Region,
Count (OfficeNumber),
Row_Number(Partition by EmpID ORDER by
Count(OfficeNumber) Desc)
FROM
Employees e
JOIN
Offices o ON e.OfficeNumber = o.OfficeNumber
不确定我是否正确使用Row_Number函数或是否有更好的方法?
答案 0 :(得分:0)
两个CTE可以完成这项工作。第一个创建每个Employee / Office的计数,第二个获得每个Employee的主办公室。希望它有效4你
with CountCte as (
SELECT *,count(*) over (partition by [EmpID],[OfficeNumber]) OfficeCount
FROM
Employees e
JOIN
Offices o ON e.OfficeNumber = o.OfficeNumber),
MainCte as (
select *,row_number() over (partition by [EmpID] order by OfficeCount desc) r
from CountCte)
select EmpID
,Region
,Manager
,OfficeNUmber
from MainCte
where r = 1