不确定标题是否正确说明了我要做什么,但是我有下表。
[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()窗口函数了,但是我什么也没做。有什么建议么?
答案 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;