SQL增量计数重复值

时间:2019-05-23 17:02:03

标签: sql h2

不确定标题是否正确说明了我要做什么,但是我有下表。

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

我正在尝试创建它,从而将为每个ID生成一个ROWID。

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

我以为我可能已经可以在H2上使用ROW_NUMBER()窗口函数了,但是我什么也没做。有什么建议么?

2 个答案:

答案 0 :(得分:0)

您可以使用DENSE_RANK()窗口功能。

查询将是:

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

如文档中所述

  

如果ORDER BY列中两行或更多行具有相同的值,则这些行的排名相同。

我无法测试查询H2,因此已在SQL Server中进行了验证。 Demo link in SQL Server

答案 1 :(得分:0)

您可以使用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;