需要查询中的rowid

时间:2016-09-09 09:59:36

标签: oracle oracle11g

我正在尝试从查询中获取rowid。我的疑问是:

  

表:test(PersonId number,AssetId number);

查询:

with abc as(
select      
       personid , 
       row_number() over(partition by personid order by personid,carid) rnk       
from test
--group by personid,carid,rowid
)
select rowid, abc.* from abc ;

及其投掷错误。

ORA-01446: cannot select ROWID from,or sample,a view with DISTINCT,GROUP BY etc

有什么方法可以获得rowid(这种方式)或者不允许使用我试图进入Oracle的方式获取rowid。谁能在这里抛出一些观点。感谢。

2 个答案:

答案 0 :(得分:2)

尝试在with子查询中包含rowid(我使用了别名)

with abc as(
select      
       personid , 
       rowid as r, 
       row_number() over(partition by personid order by personid,carid) rnk       
from test
/***This was unwanted in question***/
--group by personid,carid,rowid
)
select r, personid, rnk 
 from abc ;

答案 1 :(得分:0)

GROUP BYROWID一起使用不会聚合行,因为ROWID是唯一的,因此每个组的大小始终为1。

你可以这样做:

SELECT personid,
       ROW_NUMBER() OVER ( PARTITION BY personid ORDER BY carid ) AS rnk,
       ROWID
FROM   test;