वास्तव में यह सब करना इतना कठिन नहीं है:
;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