2016-09-09 4 views
0

Ich versuche, die Rowid von einer Abfrage zu bekommen. Meine Abfrage lautet:Benötige Rowid von einer Abfrage

Tabelle: Test (PersonId Nummer, AssetId Nummer);

Abfrage:

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 ; 

und seine Wurffehler.

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

Gibt es eine Möglichkeit, die Rowid bekommen kann (auf diese Weise) oder es ist nicht zu bekommen Rowid mit der Art und Weise erlaubt versuchen in Oracle zu bekommen. Kann jemand hier ein paar Ansichten werfen? Vielen Dank.

+1

Das macht keinen Sinn für mich. Warum denkst du, du brauchst die ROWID? Und warum haben Sie die 'Gruppe von ', wenn Sie nicht in der inneren Abfrage aggregieren? –

+0

Sie können sehen, warum ich das bei http://stackoverflow.com/questions/39404842/delete-rows-to-haves-maximum-x-lines-per-group-in-oracle-table/39410327#39410327 – XING

+0

Nun Die "Gruppe von" in dieser Antwort ist völlig nutzlos. –

Antwort

2

Versuchen einschließlich Rowid innerhalb der mit Unterabfrage (verwendete ich einen Alias)

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 ; 
+0

Orakel dreht sich alles um Tricks..Sie haben es richtig, – XING

0

Mit GROUP BY mit ROWID nicht aggregierten Reihen als ROWID einzigartig ist, so dass die Größe jeder Gruppe wird immer 1.

sein

Sie können einfach tun:

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