您可以使用SQL的服務器的XML擴展來連接行列:
SELECT ID,
UserName,
OfficeNumber = STUFF(( SELECT ',' + CAST(OfficeNumber AS VARCHAR(3))
FROM YourTable b
WHERE a.UserName = b.UserName
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM ( SELECT ID = MIN(ID), UserName
FROM YourTable
GROUP BY UserName
) a;
Example on SQL Fiddle
有another question on SO哪裏有人問這種方法是如何工作的複雜性,並有幾個答案,所以我不會在這裏重複說明。
編輯
就好像你是不是取最小ID爲每個用戶名,但重新分配一個新的號碼作爲ID,如果ID是基於該最原始ID對每個被reassinged用戶名,那麼你可以使用:
SELECT ID,
UserName,
OfficeNumber = STUFF(( SELECT ',' + CAST(OfficeNumber AS VARCHAR(3))
FROM YourTable b
WHERE a.UserName = b.UserName
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM ( SELECT ID = ROW_NUMBER() OVER(ORDER BY MIN(ID)), UserName
FROM YourTable
GROUP BY UserName
) a;
Example on SQL-Fiddle
或者如果它是按字母順序排列,你可以使用
SELECT ID = ROW_NUMBER() OVER(ORDER BY a.UserName),
UserName,
OfficeNumber = STUFF(( SELECT ',' + CAST(OfficeNumber AS VARCHAR(3))
FROM YourTable b
WHERE a.UserName = b.UserName
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM YourTable a
GROUP BY a.UserName
Example on SQL-Fiddle
你試過了什麼?你想刪除第4和5行? –
你如何決定結果中的ID值? – upog
是的,第4行和第5行將被刪除,摘錄將與用戶名出現在表中的第一行中的辦公室號碼合併的辦公室號碼。 – BenCee