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

एसक्यूएल सर्वर 2008 सीटीई रिकर्सन

वास्तव में यह सब करना इतना कठिन नहीं है:

;WITH cte AS
(
    SELECT CAST('/' + Name AS VARCHAR(50)) as 'CteName', ID
    FROM dbo.YourTable
    WHERE parent_id IS NULL

    UNION ALL

    SELECT CAST(cte.CteName + '/' + Name AS VARCHAR(50)), t.ID
    FROM dbo.YourTable t
    INNER JOIN cte ON t.parent_id = cte.id
)
SELECT cteName FROM cte
ORDER BY ID

मुझे इसका आउटपुट देता है:

/A
/A/B
/A/B/C
/A/D

एक साइड-नोट के रूप में:सीटीई द्वारा "गहराई" की गणना आसानी से की जा सकती है और आपको इसे अपनी तालिका में संग्रहीत करने की आवश्यकता नहीं है (देखें Level कॉलम मैंने जोड़ा है):

;WITH cte AS
(
    SELECT 
       CAST('/' + Name AS VARCHAR(50)) as 'CteName', ID, 
       1 AS 'Level'
    FROM dbo.YourTable
    WHERE parent_id IS NULL

    UNION ALL

    SELECT 
       CAST(cte.CteName + '/' + Name AS VARCHAR(50)), t.ID,
       cte.Level + 1 AS 'Level'
    FROM dbo.YourTable t
    INNER JOIN cte ON t.parent_id = cte.id
)
SELECT cteName FROM cte
ORDER BY Level, ID


  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 सर्वर में varchar को डेटाटाइम में बदलें

  2. तालिका पंक्तियों को संपादित करके SQL सर्वर तालिका में पंक्तियों को कैसे सम्मिलित करें GUI - SQL सर्वर / TSQL ट्यूटोरियल भाग 101

  3. SQL सर्वर (T-SQL) में समर्थित समय क्षेत्रों की सूची प्राप्त करें

  4. संग्रहीत प्रक्रिया स्पष्टीकरण के बिना प्रतीत होती है लटकती है

  5. टी-एसक्यूएल का उपयोग करके "सर्वर आरपीसी के लिए कॉन्फ़िगर नहीं किया गया है" संदेश 7411 को कैसे ठीक करें?