Try this option -
Query1:
DECLARE @temp TABLE ( ID INT , Col1 VARCHAR(30) , Col2 VARCHAR(30) ) INSERT INTO @temp (ID, Col1, Col2) VALUES (1, 'A', 'X'), (2, 'B', 'Y'), (2, 'C', 'Z') SELECT r.ID , Col1 = STUFF(REPLACE(REPLACE(CAST(dxquery('/t1/a') AS VARCHAR(MAX)), '<a>', ','), '</a>', ''), 1, 1, '') , Col2 = STUFF(REPLACE(REPLACE(CAST(dxquery('/t2/a') AS VARCHAR(MAX)), '<a>', ','), '</a>', ''), 1, 1, '') FROM ( SELECT DISTINCT ID FROM @temp ) r OUTER APPLY ( SELECT x = CAST(( SELECT [t1/a] = t2.Col1 , [t2/a] = t2.Col2 FROM @temp t2 WHERE r.ID = t2.ID FOR XML PATH('') ) AS XML) ) d
Request 2:
SELECT r.ID , Col1 = STUFF(REPLACE(CAST(dxquery('for $a in /a return xs:string($a)') AS VARCHAR(MAX)), ' ,', ','), 1, 1, '') , Col2 = STUFF(REPLACE(CAST(dxquery('for $b in /b return xs:string($b)') AS VARCHAR(MAX)), ' ,', ','), 1, 1, '') FROM ( SELECT DISTINCT ID FROM @temp ) r OUTER APPLY ( SELECT x = CAST(( SELECT [a] = ',' + t2.Col1 , [b] = ',' + t2.Col2 FROM @temp t2 WHERE r.ID = t2.ID FOR XML PATH('') ) AS XML) ) d
Output:
ID Col1 Col2 ----------- ---------- ---------- 1 AX 2 B,CY,Z