我有一个看起来像这样的列表:
id Name parentID position
10 Object10 null 1
20 Object20 10 20
30 Object30 10 85
40 Object40 10 48
50 Object40 20 123
现在我想使用parentId 10
获取所有行并对它们进行排序
select * from table1 where parentId=10 ORDER BY id ASC
列表现在应该是这样的:
id Name parentID position
20 Object20 10 20
30 Object30 10 85
40 Object40 10 48
我现在要做的是更改position
列中的值。我想更改数字,使它们从0开始计数,直到它们到达此排序列表中的最后一个元素。这应该是这样的:
id Name parentID position
20 Object20 10 0
30 Object30 10 1
40 Object40 10 2
我怎样才能做到这一点?
答案 0 :(得分:0)
Sql Server: 仅适用于一个父ID:
select ID, Name, ParentID,
RowNumber() Over (Order By ID) Position from table1
where parentId=10
ORDER BY id ASC
对于由parentID分区的所有记录:
select ID, Name, ParentID,
RowNumber() Over (Partition By ParentID Order By ID) Position from table1
ORDER BY ParentID, id
看起来这适用于以下内容:
CUBRID - DB2 - Firebird - Informix - Oracle - PostgreSQL - SQL Server - Sybase SQL 任何地方 - Teradata
https://blog.jooq.org/2014/08/12/the-difference-between-row_number-rank-and-dense_rank/