Oracle: объединить порядковый номер для повторяющихся значений - PullRequest
0 голосов
/ 09 мая 2018

Моя ситуация похожа на this , но я просто хочу создать порядковый номер только для повторяющихся значений.

Table: MyTable
-----------------------
ID  CODE

1   100     

2   100     

3   200     

4   200     

5   200 

6   300

Ниже мой запрос:

SELECT ID, CODE, (row_number() over (partition by CODE order by ID)) as SEQ from MyTable

И это мой текущий результат:

ID  CODE    SEQ

1   100     1

2   100     2

3   200     1

4   200     2

5   200     3

6   300     1

Но мой ожидаемый результат:

ID  CODE    SEQ

1   100     1

2   100     2

3   200     1

4   200     2

5   200     3

6   300     

В конце концов, я делаю кодирование, чтобы изменить свой текущий результат. Но я хочу спросить, есть ли способ получить ожидаемый результат только с помощью запроса?

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете добавить CASE COUNT (1) сверх (разделение по CODE) в запросе, см. Пример запроса ниже.

WITH MyTable
as (
select 1 id,  100 code from dual union all
select 2 id,  100 code from dual union all
select 3 id,  200 code from dual union all
select 4 id,  200 code from dual union all
select 5 id,  200 code from dual union all
select 6 id,  300 code from dual)
SELECT ID, CODE, CASE COUNT(1) over (partition by CODE)
                    WHEN 1 THEN NULL
                    ELSE row_number() over (partition by CODE order by ID)
                 END as SEQ 
  from MyTable;

        ID       CODE        SEQ
---------- ---------- ----------
         1        100          1
         2        100          2
         3        200          1
         4        200          2
         5        200          3
         6        300           

6 rows selected 
...