2015-09-19 4 views
1

У меня есть таблица, как этотOracle/PLSQL Iterate таблица и индекс столбца

section_id 
========= 
    1A 
    1A 
    1B 
    1B 
    1B 
    1C 

и мне нужно, чтобы создать числовой столбец с индексом каждого элемента группы, как это:

index section_id 
====== ========= 
    1  1A 
    2  1A 
    1  1B 
    2  1B 
    3  1B 
    1  1C 

Как это сделать в базе данных Oracle?

+0

'ВЫБОР SECTION_ID, ROW_NUMBER() OVER (раздел, который по SECTION_ID порядке по SECTION_ID) как индекс FROM your_tab ORDER BY индекса, section_id' – lad2025

+0

Спасибо, это сработало, но я думаю, что лучшим решением является упорядочить партион на rownum, чтобы выполнить правильный порядок строк. – VinceJin

+0

'rownum' динамически создается на основе результатов запроса. Это не порядок, в который были вставлены строки. Если вам нужен порядок вставки, вам нужно добавить столбец для отслеживания этого. – Allan

ответ

0

row_number() Функция окна - ваш друг. Обратите внимание, BTW, что index является зарезервированным словом, и вы можете захотеть рассмотреть другое имя. Так или иначе:

SELECT ROW_NUMBER() OVER (PARTITION BY section_id ORDER BY 1), session_id 
FROM  my_table 
ORDER BY 2 
0

Применение ROW_NUMBER функции:

SqlFiddleDemo

SELECT 
    ROW_NUMBER() OVER(PARTITION BY section_id ORDER BY section_id) AS "index" 
    ,section_id 
FROM tab 
ORDER BY section_id, "index"; 
Смежные вопросы