あなたはこのソリューションを支援するために再帰を使用することができます。
CREATE TABLE #Temp(ColumnA VARCHAR(50), ColumnB INT)
INSERT INTO #Temp
VALUES('NAME1', 1)
, ('NAME2', 1)
, ('NAME3', 1)
, ('NAME4', 2)
, ('NAME5', 2)
, ('NAME6', 3)
, ('NAME7', 3)
;WITH Numbered
AS
(
SELECT ColumnA, ColumnB, ROW_NUMBER() OVER (PARTITION BY ColumnB ORDER BY ColumnA) AS RowNum
FROM #Temp
)
,RecordCounts
AS
(
SELECT ColumnB, COUNT(1) AS RecordCount
FROM #Temp
GROUP BY ColumnB
)
,RecursiveCTE
AS
(
SELECT ColumnB, CONVERT(VARCHAR(50), ColumnA) AS ColumnA, RowNum
FROM Numbered
WHERE RowNum = 1
UNION ALL
SELECT N.ColumnB, CONVERT(VARCHAR(50), R.ColumnA + ', ' + N.ColumnA), N.RowNum
FROM RecursiveCTE R
INNER JOIN Numbered N ON R.ColumnB = N.ColumnB
AND N.RowNum = R.RowNum + 1
)
SELECT ColumnA
FROM RecursiveCTE R
INNER JOIN RecordCounts RC ON R.ColumnB = RC.ColumnB
AND R.RowNum = RC.RecordCount
ORDER BY R.ColumnB
DROP TABLE #Temp
出典
2016-06-22 17:30:44
RYN