逗号SQL查询中的值分隔

时间:2014-06-11 09:52:23

标签: sql sql-server

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

目前我正在使用:

SELECT DISTINCT name FROM contacts

要获得此结果:

11111
22222
33333

但我需要有这个结果:

11111, 22222, 33333

我在XML PATH中看到了一些示例,但我无法将其改编为我的代码。有人可以帮我查询一下吗?

4 个答案:

答案 0 :(得分:2)

STUFF + XML PATH将完成这项工作:

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

演示:http://sqlfiddle.com/#!3/748e4/1

答案 1 :(得分:0)

您可以使用STUFF:

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

答案 2 :(得分:0)

       declare @t table  (Name Varchar(50))

       Insert into @t (Name) values ('1111'), ('2222'), ('3333')

        DECLARE @tt VARCHAR(MAX) 
        SELECT @tt= COALESCE(@tt + ', ', '') + Name from @t 
        SELECT @tt AS Result

OR 

   declare @t table  (Name Varchar(50))

   Insert into @t (Name) values ('1111'), ('2222'), ('3333')

SELECT SUBSTRING(
(SELECT ',' + s.Name
FROM @t s
ORDER BY s.Name
FOR XML PATH('')),2,200000) As Names
GO 

答案 3 :(得分:0)

试试这个:

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可能会影响名称的顺序。这对你来说可能有关,也可能没有关系。