从Oracle 10g中的表中的一组行中检索特定行的行号

时间:2013-03-21 12:09:45

标签: oracle oracle10g rownum

我在Oracle 10g中有一个名为USER_ROLES的表,如下所示。

USER_ROLE_ID        USER_ID    AUTHORITY

28                  2          ROLE_ADMIN
45                  3          ROLE_USER
61                  3          ROLE_ASSISTANT
27                  3          ROLE_SUPERVISOR

其中USER_ID是表USER_TABLE的外键。我需要知道与特定用户(USER_ID)关联的一组行中特定行的行号(而不是基于此表中的所有行)。


以下SQL根据所有此表中的行检索给定USER_ROLE_ID的行号(本例中为28)。

select row_num from 
(select row_number() over (order by user_role_id desc) as row_num, user_role_id 
from user_roles order by user_role_id desc)
where user_role_id=28

在这种情况下显示3。


但我需要从一组行中检索行号,这些行只与特定用户相关联。为此,如果我尝试以下SQL,

select row_num from 
(select row_number() over (order by user_role_id desc) as row_num, user_role_id 
from user_roles order by user_role_id desc)
where user_id=2 and user_role_id=28

在这种情况下,我修改了

中的WHERE子句
where user_role_id=28

where user_id=2 and user_role_id=28

它会出现以下错误。

ORA-00904: "USER_ID": invalid identifier

那么,在这种情况下,从仅与特定用户关联的行获取行号的方法是什么?

1 个答案:

答案 0 :(得分:3)

只需将user_id添加到内部查询即可。我想如果你想让row_num为user_id(如果不忽略那个位),你也想要对该分析进行分区:

select row_num 
  from  (select row_number() over (partition by user_id 
                                   order by user_role_id desc) as row_num, 
                user_role_id, user_id
           from user_roles)
where user_role_id=28 and user_id = 2;