Счетчик приращений SQL для повторяющихся значений - PullRequest
0 голосов
/ 23 мая 2019

Не уверен, правильно ли указано в моем заголовке, что я ищу, но у меня следующая таблица.

[ID] [ROWID]
 10
 11
 11
 12
 13
 13

И я пытаюсь создать это, посредством чего ROWID будет генерироваться для каждого идентификатора.

[ID] [ROWID]
 10     1
 11     2
 11     2
 12     3
 13     4
 13     4

Я думал, что мог бы использовать оконную функцию ROW_NUMBER () на H2, но я не смог заставить что-либо работать. Какие-либо предложения?

Ответы [ 2 ]

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

Вы можете использовать dense_rank.В случае связи ему будет присвоен тот же номер.

select
    ID
    ,dense_rank() over (order by ID asc) as [ROWID]
from yourTable

Если вы не можете использовать dense_rank(), вы можете смоделировать его, используя чистый SQL:

SELECT ID,
 (SELECT COUNT(DISTINCT ID) 
 FROM yourTable AS O2
 WHERE O2.ID < O1.ID ) + 1 AS [ROWID]
FROM yourTable AS O1;
0 голосов
/ 23 мая 2019

Вы можете использовать DENSE_RANK () оконную функцию.

Запрос будет:

 SELECT ID, DENSE_RANK() OVER (ORDER BY ID) AS ROWID
 FROM Table

Как указано в документе

Если две или более строки имеют одинаковые значения в столбцах ORDER BY, эти строки получают одинаковый ранг.

Я не могу протестировать запрос H2, поэтому проверено в SQL Server. Демонстрационная ссылка в SQL Server

...