我知道标题并没有多说,但让我向你解释一下我的情况:
我有下表:
现在,我想从每个部门中选择前1名,但我不想获得重复的职位ID,因此我希望每个部门的最高员工按项目数量,但不同的职位ID。结果是突出显示的行。
答案 0 :(得分:1)
您不能保证返回的职位是最好的。在两个部门中,一个职位可能是最好的,在这种情况下,需要放宽其中一个结果限制。
所以,这里有一种方法可以让一些(也许是所有)部门排名最高但位置不同。首先,只为每个部门选择排名最高的员工。这些是项目最多的项目。
然后,对于每个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;
保证为每个部门返回一行。但是,保证返回的所有部门将具有不同的职位类型,并且行将最适合该部门。你可能会努力调整中间步骤,以确保更多的部门覆盖。但是,由于问题无法保证有解决方案,因此这些调整可能比他们的价值更多。