SQL对表进行排序并从上到下进行更新

时间:2016-06-15 12:39:53

标签: sql

我有一个看起来像这样的列表:

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

我怎样才能做到这一点?

1 个答案:

答案 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/