我知道标题没有说太多,但让我解释一下我的情况:
我有下表:
现在,我想从每个部门中选择前 1 名,但我不想获得重复的职位 ID,所以我希望每个部门的顶级员工按项目数计算,但职位 ID 不同。结果是突出显示的行。
我知道标题没有说太多,但让我解释一下我的情况:
我有下表:
现在,我想从每个部门中选择前 1 名,但我不想获得重复的职位 ID,所以我希望每个部门的顶级员工按项目数计算,但职位 ID 不同。结果是突出显示的行。
您不能保证返回的位置是最好的。一个职位可能是两个部门中最好的,在这种情况下,需要放宽其中一个结果限制。
因此,这里有一种方法可以让一些(可能是所有)部门排名最高但职位不同。首先为每个部门选择排名最高的员工。这些是项目最多的一个。
然后,为每个PositionTypeId
人从这些备选方案中选择一个随机部门。然后,对于每个部门,选择一个随机的职位类型。以下查询采用这种方法:
select DepID, EmplyeeID, PositionTypeId, NumProjects
from (select t.*, row_number() over (partition by DepId order by newid()) as seqnum
from (select t.*, row_number() over (partition by PositionTypeId order by newid()) as position_seqnum
from (select t.*,
dense_rank() over (partition by DepId order by NumProducts desc
) as rank_seqnum
from t
) t
where rank_seqnum = 1
) t
where position_seqnum = 1
) t
where seqnum = 1;
这不能保证为每个部门返回一行。但是,可以保证返回的所有部门都将具有不同的职位类型,并且行将最适合该部门。您可能会努力调整中间步骤以确保更大的部门覆盖范围。但是,由于不能保证该问题有解决方案,因此此类调整可能付出的努力多于其价值。