:
DECLARE @Parent VARCHAR(50) = 'A'
;WITH cte
AS (SELECT *
FROM ParentChildhierarchy
WHERE parent = @Parent
UNION ALL
SELECT a.*
FROM ParentChildhierarchy a
JOIN cte b
ON a.parent = b.child)
SELECT *
FROM cte
:
:
DECLARE @Parent VARCHAR(50) = 'A'
;WITH cte
AS (SELECT *
FROM ParentChildhierarchy
WHERE parent = @Parent
UNION ALL
SELECT a.*
FROM ParentChildhierarchy a
JOIN cte b
ON a.parent = b.child)
SELECT STUFF((SELECT ',' + Child
FROM cte
FOR XML PATH('')), 1, 1, '')
SQLFiddle
2:
:
;WITH cte
AS (SELECT *,
Parent [TopParent]
FROM ParentChildhierarchy
UNION ALL
SELECT a.*,
[TopParent]
FROM ParentChildhierarchy a
JOIN cte b
ON a.parent = b.child)
SELECT [TopParent],
STUFF((SELECT ',' + Child
FROM cte b
WHERE a.[TopParent] = b.[TopParent]
FOR XML PATH('')), 1, 1, '')
FROM cte a
GROUP BY [TopParent]
SQLFiddle
, :
;WITH cte
AS (SELECT *,
Parent [TopParent]
FROM ParentChildhierarchy
UNION ALL
SELECT a.*,
[TopParent]
FROM ParentChildhierarchy a
JOIN cte b
ON a.parent = b.child) SELECT [TopParent],
STUFF((SELECT ',' + Child
FROM cte b
WHERE a.[TopParent] = b.[TopParent]
FOR XML PATH('')), 1, 1, '')
FROM cte a
GROUP BY [TopParent]
UNION
SELECT Child,
NULL
FROM ParentChildhierarchy p
WHERE NOT EXISTS (SELECT 1
FROM ParentChildhierarchy c
WHERE p.Child = c.Parent)
SQLFiddle
Microsoft : https://technet.microsoft.com/en-us/library/ms186243(v=sql.105).aspx