私は再帰的なCTEにもう一度苦労しています。私は各行に関連するスコアを持つ自己参照テーブルを持っています。私は親ノードのソート順に対応する葉ノードのソート順序をスコアで解決する必要があります(スコアでもソートされます)。グループ分けは次のようになります。自己参照表のグループの順位を決定する
Groups Score
------------------------------------
Group 1 0.95
Group a 0.7
Group i 0.9
Group ii 0.7
Group b 0.9
Group iii 0.5
Group iv 1.0
Group 2 0.9
Group c 0.5
Group d 0.8
Group 3 1.0
これは予想される結果セット:
GroupID GroupName Score Rank
------------------------------------
11 Group 3 1.0 1
7 Group iv 1.0 2
6 Group iii 0.5 3
3 Group i 0.9 4
4 Group ii 0.7 5
10 Group d 0.8 6
9 Group c 0.5 7
ここ
だサンプルを記録。前もって感謝します。
declare @tblGroups table (
GroupID int,
GroupName nvarchar(50),
ParentID int,
Score float
)
insert into @tblGroups values (1, 'Group 1', null, 0.95)
insert into @tblGroups values (2, 'Group a', 1, 0.7)
insert into @tblGroups values (3, 'Group i', 2, 0.9)
insert into @tblGroups values (4, 'Group ii', 2, 0.7)
insert into @tblGroups values (5, 'Group b', 1, 0.9)
insert into @tblGroups values (6, 'Group iii', 5, 0.5)
insert into @tblGroups values (7, 'Group iv', 5, 1.0)
insert into @tblGroups values (8, 'Group 2', null, 0.9)
insert into @tblGroups values (9, 'Group c', 8, 0.5)
insert into @tblGroups values (10, 'Group d', 8, 0.8)
insert into @tblGroups values (11, 'Group 3', null, 1.0)
select
g.*
from
@tblGroups g
これは、親のスコアのすべての方法を追跡することはありません。この場合はうまくいくでしょうが、Group1を.4に変更すると、group1の下のすべてが親ノードの一番下に落ちるときにも、同じ出力が得られます。 http://sqlfiddle.com/#!3/c0b64/2それは基本的に、直接の親の最大スコアをチェックするだけで、トップへ伝えません。 –
@JustinPihony - 実際にはスコアを記録します。私はOPが本当に望んでいないものを並べ替える方法で本当に望んでいるかどうか少し不明です。 – HABO
並べ替えは不規則ではなく、それぞれの親に基づいています。それをよりうまく説明しようとすると、親をソートしていますが、子をソートしますが、親の親をベースにしています(parent1が一番上のソートの場合は、すべての子が親2の子供たち)...それはそれをより良く説明しますか? –