FROM @TABLE
FROM YOURTABLENAMEHERE
;WITH cte ( requestid, approvallist, approvelevelname, length ) AS (SELECT requestid, CAST('' AS VARCHAR(8000)), CAST('' AS VARCHAR(8000)), 0 FROM dbo.ts_status GROUP BY requestid UNION ALL SELECT p.requestid, CAST(approvallist + CASE WHEN length = 0 THEN '' ELSE ', ' END + p.approvelevelname AS VARCHAR(8000)), CAST(p.approvelevelname AS VARCHAR(8000)), length + 1 FROM cte c INNER JOIN dbo.ts_status p ON c.requestid = p.requestid WHERE p.approvelevelname > c.approvelevelname)SELECT requestid, approvallistFROM (SELECT requestid, approvallist, Rank() OVER ( PARTITION BY requestid ORDER BY length DESC ) FROM cte) d ( requestid, approvallist, rank )WHERE rank = 1