Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

टी/एसक्यूएल में रिकर्सिव चाइल्ड/अभिभावक प्रश्न

आपको कुछ ऐसा बनाने के लिए अपनी रिकर्सन की आवश्यकता होगी जिसे अंत में क्रमबद्ध किया जा सके:

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 है इस तरह की चीज़ के लिए टाइप करें...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL सर्वर में एकल उद्धरण से कैसे बचूँ?

  2. जाँच करें कि क्या ऑब्जेक्ट OBJECTPROPERTY () फ़ंक्शन का उपयोग करके SQL सर्वर में एक तालिका, दृश्य या संग्रहीत प्रक्रिया है

  3. SQL सर्वर इंस्टेंस चलाने के सर्वर स्तर के संयोजन को कैसे बदलें

  4. HTML प्रारूप में sp_send_dbmail

  5. SQL सर्वर पर FoxPro DBF फ़ाइल आयात करने का प्रयास कर रहा है