我在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
那么,在这种情况下,从仅与特定用户关联的行获取行号的方法是什么?
答案 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;