Ich habe wieder mit rekursiven CTE zu kämpfen. Ich habe eine selbstreferenzierende Tabelle mit einer Punktzahl, die jeder Zeile zugeordnet ist. Ich muss die Sortierreihenfolge der Blattknoten nach Punktzahl auflösen, die der Sortierreihenfolge der Elternknoten entspricht (auch sortiert nach Punktzahl). Die Gruppierung sieht wie folgt aus:Ermitteln Sie die Rangfolge von Gruppen in einer selbstreferenzierenden Tabelle
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
Dies ist das erwartete Ergebnis Satz:
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
Hier Beispieldatensätze. Danke im Voraus.
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
Ja, das merkt sich nicht die Partitur der Eltern. Es passiert einfach, in diesem Fall zu arbeiten, aber ändern Sie Group1 zu a.4 und es gibt immer noch die gleiche Ausgabe, wenn alles unter group1 bis zum Ende der Elternknoten fallen sollte: Dies kann hier gesehen werden. http://sqlfiddle.com/#!3/c0b64/2 Es überprüft im Grunde nur die maximale Punktzahl des unmittelbaren Elternteils, nicht nach oben –
@JustinPihony - Tatsächlich verfolgt es die Ergebnisse. Ich bin nur ein wenig unklar darüber, was das OP wirklich will, indem es auf unberechenbare Weise sortiert. – HABO
Die Sortierung ist nicht sprunghaft, sie basiert auf dem jeweils übergeordneten Element. Um zu versuchen, es besser zu erklären, sortiert er die oberen Eltern, dann sortiert er die Kinder, aber basiert auf dem obersten Elternteil (also ist es wie sagend, wenn parent1 die oberste Sortierung ist, dann haben ALLE ihre Kinder Vorrang vor JEDEM von parent2's Kinder) ... erklärt das das besser? –