Псевдостолбца Oracle ROWNUM - PullRequest
       21

Псевдостолбца Oracle ROWNUM

3 голосов
/ 02 октября 2008

У меня сложный запрос с group by и order by clause, и мне нужно отсортированный номер строки (1 ... 2 ... (n-1) ... n), возвращаемый с каждой строкой. Использование ROWNUM (значение присваивается строке после прохождения фазы предиката запроса, но до того, как запрос выполняет какую-либо сортировку или агрегацию) дает мне несортированный список (4 ... 567 ... 123 ... 45 ...). Я не могу использовать приложение для подсчета и назначения номеров для каждой строки.

Ответы [ 6 ]

11 голосов
/ 02 октября 2008

Есть ли причина, по которой вы не можете просто сделать

SELECT rownum, a.* 
  FROM (<<your complex query including GROUP BY and ORDER BY>>) a
3 голосов
/ 02 октября 2008

Вы можете сделать это как подзапрос, так что имейте:

select q.*, rownum from (select... group by etc..) q

Это, вероятно, сработает ... не знаю, есть ли что-нибудь лучше, чем это.

0 голосов
/ 27 июля 2010

Если вы хотите использовать ROWNUM для выполнения чего-либо большего, чем ограничение общего числа строк, возвращаемых в запросе (например, И ROWNUM <10), вам потребуется псевдоним ROWNUM: </p>

 select * 
   (select rownum rn, a.* from 
          (<sorted query>) a))
 where rn between 500 and 1000 
0 голосов
/ 06 октября 2008

Я тоже иногда делаю что-то вроде:

SELECT * FROM
(SELECT X,Y FROM MY_TABLE WHERE Z=16 ORDER BY MY_DATE DESC)
WHERE ROWNUM=1
0 голосов
/ 02 октября 2008

Предполагая, что ваш запрос уже упорядочен так, как вы хотите, и вы просто хотите, чтобы число указывало, какая строка в этом порядке:

SELECT ROWNUM AS RowOrderNumber, Col1, Col2,Col3...
FROM (
    [Your Original Query Here]
)

и замените "Colx" именами столбцов в вашем запросе.

0 голосов
/ 02 октября 2008

Можете ли вы использовать встроенный запрос? т.е.

SELECT cols, ROWNUM
FROM   (your query)
...