, @astander scipt .
, .
- ,
, XML, ( STUFF )
DECLARE @TABLE TABLE(
cat_id INT,
Cat_Name VARCHAR(50),
Main_Cat_Id INT
)
DECLARE @Collected TABLE(
cat_id INT
)
INSERT INTO @TABLE SELECT 1,'veg',null
INSERT INTO @TABLE SELECT 2,'main course',1
INSERT INTO @TABLE SELECT 3,'starter',1
INSERT INTO @TABLE SELECT 4,'Indian',2
INSERT INTO @TABLE SELECT 5,'mexican',2
INSERT INTO @TABLE SELECT 6,'tahi',3
INSERT INTO @TABLE SELECT 7,'chinese',3
INSERT INTO @TABLE SELECT 8,'nonveg',null
INSERT INTO @TABLE SELECT 9,'main course',8
INSERT INTO @TABLE SELECT 10,'indian',9
INSERT INTO @TABLE SELECT 11,'starter',8
INSERT INTO @TABLE SELECT 12,'tahi',11
INSERT INTO @TABLE SELECT 13,'chinese',11
INSERT INTO @TABLE SELECT 14,'chinese',6
DECLARE @nodeID INT = 1;
DECLARE @result VARCHAR(MAX);
;WITH Recursives AS (
SELECT cat_id, main_cat_id
FROM @TABLE
WHERE Cat_Id = @nodeID
UNION ALL
SELECT T.cat_id, T.main_cat_id
FROM @TABLE AS T
INNER JOIN Recursives AS R
ON t.Main_Cat_Id = r.cat_id
)
INSERT INTO @Collected
SELECT cat_id
FROM Recursives
SELECT @result = STUFF(
(SELECT ',' + CAST( cat_id AS VARCHAR)
FROM @Collected
ORDER BY cat_id
FOR XML PATH('')
), 1,1,'')
SELECT @result