2

私はそのようなテーブルを持っています

ID               Node                  ParentID
1                 A                        0
2                 B                        1
3                 C                        1
4                 D                        2
5                 E                        2
6                 F                        3
7                 G                        3
8                 H                        3 
9                 I                        4
10                J                        4
11                K                        10
12                L                        11

ノードがその親内に表示される順序で「位置」フィールドを生成するクエリが必要です。以下の例

ID               Node                  ParentID                  Positon
1                 A                        0                         0
2                 B                        1                         0
3                 C                        1                         1
4                 D                        2                         0
5                 E                        2                         1
6                 F                        3                         0
7                 G                        3                         1
8                 H                        3                         2 
9                 I                        4                         0
10                J                        4                         1
11                K                        10                        0
12                L                        11                        0
4

2 に答える 2

2

元のテーブルの位置を更新するには、サブクエリまたは CTE として、既に提案されているステートメントに結合します。

;with cte (ID, Pos)
as (
    select ID, row_number() over (partition by ParentID order by ID) - 1
    from [Table]
)
update T
set T.Position = cte.Pos
from [Table] T
    join cte on cte.ID = T.ID
于 2013-07-15T12:26:21.463 に答える