这里有很好的解释:
How Stuff and 'For Xml Path' work in SQL Server?
--sample data
CREATE TABLE #t1 (rnum VARCHAR(20) NOT NULL, tnum VARCHAR(20) NOT NULL, vendor VARCHAR (20) NOT NULL)
INSERT INTO #t1
VALUES
('R1','T1','A'),
('R1','T2','A'),
('R1','T3','B'),
('R2','T4','A'),
('R2','T5','A'),
('R3','T6','A'),
('R3','T6','B'),
('R3','T8','C');
SELECT rnum,
tnum = STUFF ((SELECT ',' + tnum FROM #t1 t1 WHERE t2.rnum = t1.rnum FOR XML PATH ('')), 1, 1, ''),
vendor = STUFF ((SELECT ',' + vendor FROM #t1 t3 WHERE t2.rnum = t3.rnum FOR XML PATH ('')), 1, 1, '' )
FROM #t1 t2
GROUP BY rnum
DROP TABLE #t1