Oracle SQL:在同一个表上为多个选择查询获取一个结果集

时间:2017-12-27 09:03:11

标签: sql oracle

这是我关于stackoverflow的第一篇文章,所以请耐心等待。假设我有一个员工表,其中包含角色a,b,c,d等。我需要前5名员工的角色为A,前5名员工为角色B,前5名员工为角色C.请注意我需要在结果集中的表的所有列。任何帮助将不胜感激。

样本数据

 inactiveList.WrapLayoutLongPressHandle += (sender, e) =>
 {
 };

 inactiveList.WrapLayoutTapHandle += (sender, e) =>
 {
 };

必需的输出

Name---Dept---Role  
abc1---HR---A  
abc2---HR---B  
abc3---HR---C  
abc4---HR---D  
abc5---HR---A  
abc6---HR---B  
abc7---HR---C  
abc8---DEV---D  
abc9---DEV---A  
abc10---DEV---B  
abc11---DEV---C  
abc12---DEV---D  
abc13---DEV---A  
abc14---DEV---B  
abc15---DEV---C  
abc16---Test---D  
abc17---Test---A  
abc18---Test---B  
abc19---Test---C  
abc20---Test---D  
abc21---Test---A  
abc22---Test---B  
abc23---Test---C  
abc24---Test---D  
abc25---Test---A  
abc26---Test---B 

谢谢, SUD

1 个答案:

答案 0 :(得分:1)

您希望对记录进行排名(每个角色的第一个/最佳五个)。这样做是通过RANKDENSE_RANKROW_NUMBER等分析函数完成的。

select name, dept, role
from
(
  select name, dept, role, row_number() over (partition by role order by name) as rn
  from employees
  where role in ('A', 'B', 'C')
)
where rn <= 5
order by role, name;