आपको कुछ ऐसा बनाने के लिए अपनी रिकर्सन की आवश्यकता होगी जिसे अंत में क्रमबद्ध किया जा सके:
declare @t TABLE (
[CHILD] [int] NOT NULL,
[PARENT] [int] NOT NULL
)
insert @t values
( 0, -1), -- I added this
( 1, 2 ),
( 2, 0 ),
( 3, 1 ),
( 4, 2 ),
( 5, 0 )
(ध्यान दें कि मैंने एक वास्तविक मूल तत्व जोड़ा है)
;with n(CHILD, PARENT, GENERATION, hierarchy) as (
select CHILD, PARENT,0, CAST(CHILD as nvarchar) as GENERATION from @t
where PARENT=-1
union all
select nplus1.CHILD, nplus1.PARENT, GENERATION+1,
cast(n.hierarchy + '.' + CAST(nplus1.child as nvarchar) as nvarchar)
from
@t as nplus1 inner join n on nplus1.PARENT=n.CHILD
)
select CHILD,GENERATION
from n
order by hierarchy
रिटर्न
CHILD GENERATION
----------- -----------
0 0
2 1
1 2
3 3
4 2
5 1
hierarchy
. सहित उदाहरण के लिए:
CHILD GENERATION hierarchy
----------- ----------- ------------------------------
0 0 0
2 1 0.2
1 2 0.2.1
3 3 0.2.1.3
4 2 0.2.4
5 1 0.5
आपकी आईडी कितनी बड़ी हो जाती है, इस पर निर्भर करते हुए, आपको छँटाई सही करने के लिए ज़ीरो के साथ लेफ्ट-पैडिंग के साथ सामान करना पड़ सकता है।
ध्यान दें कि SQL 2008 में एक अंतर्निहित hierarchy
है इस तरह की चीज़ के लिए टाइप करें...