SQL查询中的逗号分隔值

SQL查询中的逗号分隔值,sql,sql-server,Sql,Sql Server,我有一个名为contacts的表,我想在一行中选择所有不同的联系人姓名(int),以逗号分隔 目前我正在使用: SELECT DISTINCT name FROM contacts 要获得此结果,请执行以下操作: 11111 22222 33333 11111, 22222, 33333 但我需要得到这个结果: 11111 22222 33333 11111, 22222, 33333 我看到了一些使用XML路径的示例,但我无法将其改编为我的代码。有谁能帮我查询一下吗?STUFF+XM

我有一个名为
contacts
的表,我想在一行中选择所有不同的联系人姓名(int),以逗号分隔

目前我正在使用:

SELECT DISTINCT name FROM contacts
要获得此结果,请执行以下操作:

11111
22222
33333
11111, 22222, 33333
但我需要得到这个结果:

11111
22222
33333
11111, 22222, 33333

我看到了一些使用XML路径的示例,但我无法将其改编为我的代码。有谁能帮我查询一下吗?

STUFF
+
XML PATH
将完成以下工作:

SELECT STUFF(
             (SELECT Distinct ',' + cast (name as varchar(20)) 
              FROM contacts       
              FOR XML PATH (''))
             , 1, 1, '')
演示:

您可以使用STUFF:

SELECT 
    STUFF((
      SELECT distinct ',' + c.contacts
      FROM dbo.contacts c
      FOR XML PATH('')), 1, 1, '') as names; 
试试这个:

declare @contacts table(name nvarchar(100))

INSERT INTO @contacts (name) VALUES
('John'),
('Andrew'),
('Paul')

DECLARE @Result AS NVARCHAR(1000) -- Or even MAX if you need

SELECT @Result = ISNULL(@Result + ', ', '') + C.name
FROM (SELECT DISTINCT name FROM @contacts) C

SELECT @Result -- This is your actual result

您需要注意的唯一一件事是,DISTINCT可能会影响名称的顺序。这对你来说可能重要,也可能不重要。

这可能就是你想要的?因此,您的名称列是
int
-添加了强制转换为varchar。。