Столбец Oracle Select с номером уникального идентификатора (аналог rownum) - PullRequest
0 голосов
/ 23 мая 2019

Мне нужен столбец, который увеличивается каждый раз, когда идентификатор отличается от того, что в строке раньше.

    id    desc     
    ---------------
    152   abcdedasd
    152   dasdawidh
    152   das ads a
    194   dasdas da
    168   aopwejapw
    168   dasidjasd

до:

    num   id    desc     
    ---------------------
    1     152   abcdedasd
    1     152   dasdawidh
    1     152   das ads a
    2     194   dasdas da
    3     168   aopwejapw
    3     168   dasidjasd

У меня есть Oracle 11g. Обычно мне нужно использовать CASE или DECODE для выбора столбцов, которые зависят от других столбцов. Но мне нужно обратиться к предыдущей линии. И увеличение rownum на каждой строке без условий.

1 Ответ

4 голосов
/ 23 мая 2019

Используйте аналитическую функцию DENSE_RANK:

Установка Oracle :

CREATE TABLE test_data ( id, "desc" ) AS
  SELECT 152, 'abcdedasd' FROM DUAL UNION ALL
  SELECT 152, 'dasdawidh' FROM DUAL UNION ALL
  SELECT 152, 'das ads a' FROM DUAL UNION ALL
  SELECT 194, 'dasdas da' FROM DUAL UNION ALL
  SELECT 168, 'aopwejapw' FROM DUAL UNION ALL
  SELECT 168, 'dasidjasd' FROM DUAL;

Запрос :

SELECT DENSE_RANK() OVER ( ORDER BY id ) AS num,
       t.*
FROM   test_data t

Выход :

NUM |  ID | desc     
--: | --: | :--------
  1 | 152 | abcdedasd
  1 | 152 | dasdawidh
  1 | 152 | das ads a
  2 | 168 | aopwejapw
  2 | 168 | dasidjasd
  3 | 194 | dasdas da

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...