我不建议这样做,但是我设法解决了。
桌子:
CREATE TABLE [dbo].[names]( [id] [int] NULL, [myId] [int] NULL, [name] [char](25) NULL) ON [PRIMARY]
数据:
INSERT INTO names values (1,3,'Bob')INSERT INTO names values 2,3,'Chet')INSERT INTO names values 3,3,'Dave')INSERT INTO names values 4,4,'Jim')INSERT INTO names values 5,4,'Jose')INSERT INTO names values 6,5,'Nick')
询问:
WITH CTE (id, myId, Name, NameCount) AS (SELECt id, myId, Cast(Name AS VARCHAr(225)) Name, 1 NameCount FROM (SELECt Row_number() OVER (PARTITION BY myId ORDER BY myId) AS id, myId, Name FROM names) e WHERe id = 1 UNIOn ALL SELECt e1.id, e1.myId, Cast(Rtrim(CTE.Name) + ',' + e1.Name AS VARCHAr(225)) AS Name, CTE.NameCount + 1 NameCount FROM CTE INNER JOIN (SELECt Row_number() OVER (PARTITION BY myId ORDER BY myId) AS id, myId, Name FROM names) e1 ON e1.id = CTE.id + 1 AND e1.myId = CTE.myId)SELECt myID, NameFROM (SELECt myID, Name, (Row_number() OVER (PARTITION BY myId ORDER BY namecount DESC)) AS id FROM CTE) AS pWHERe id = 1
根据要求,这是XML方法:
SELECt myId, STUFF((SELECT ',' + rtrim(convert(char(50),Name)) FROM namestable b WHERe a.myId = b.myId FOR XML PATH('')),1,1,'') NamesFROM namestable aGROUP BY myId


