如何将多行合并为一行?

sal*_*ere 2 t-sql sql-server coalesce sql-server-2008

我正在使用 SSMS 2008 R2,并且只是尝试将多行合并为一行。我认为这应该很简单,但目前它在每一行中重复数据。考虑:

create table test
(
Name varchar(30)
)
insert test values('A'),('B'),('C')
select * from test

select distinct Name, coalesce(Name + ', ', '')
from test 
Run Code Online (Sandbox Code Playgroud)

我怎样才能重写它来实现一行:A,B,C

M.A*_*Ali 5

SELECT STUFF(( SELECT ', ' +  Name\n               from #test\n               FOR XML PATH(''), TYPE).\n               value('.','NVARCHAR(MAX)'),1,2,'')\n\n\nRESULT: A, B, C\n
Run Code Online (Sandbox Code Playgroud)\n\n

我确信这不是您尝试连接的行的确切样子,因此请参阅下面的略有不同的数据集以及您将如何对其进行此类操作

\n\n

测试数据

\n\n
create table #test\n(\nId INT,\nName varchar(30)\n)\ninsert #test values\n(1,'A'),(1,'B'),(1,'C'),(2,'E'),(2,'F'),(2,'G')\n
Run Code Online (Sandbox Code Playgroud)\n\n

询问

\n\n
select t.Id\n      , STUFF(( SELECT ', ' +  Name\n               from #test\n               WHERE Id = T.Id\n               FOR XML PATH(''), TYPE).\n               value('.','NVARCHAR(MAX)'),1,2,'') AS List\nFROM #test t\nGROUP BY  t.Id\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果集

\n\n
\xe2\x95\x94\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa6\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x97\n\xe2\x95\x91 Id \xe2\x95\x91  List   \xe2\x95\x91\n\xe2\x95\xa0\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xac\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa3\n\xe2\x95\x91  1 \xe2\x95\x91 A, B, C \xe2\x95\x91\n\xe2\x95\x91  2 \xe2\x95\x91 E, F, G \xe2\x95\x91\n\xe2\x95\x9a\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\xa9\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x9d\n
Run Code Online (Sandbox Code Playgroud)\n