2016-06-15 7 views
0

上からそれを更新し、私はちょっと、このようになります。リストがあります: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 

どうすればいいですか?

+0

データベースエンジン? –

+0

どのDBMSを使用しますか? – Jens

答えて

0

SQL Serverの: 唯一の親IDの場合:PARENTIDで仕切られたすべてのレコードの

select ID, Name, ParentID, 
     RowNumber() Over (Order By ID) Position from table1 
    where parentId=10 
    ORDER BY id ASC 

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サーバ - Sybase SQL ywhere - Teradataの

https://blog.jooq.org/2014/08/12/the-difference-between-row_number-rank-and-dense_rank/

関連する問題