我有一个名为contacts
的表,我想在一行中用逗号分隔所有不同的联系人姓名(int)。
目前我正在使用:
SELECT DISTINCT name FROM contacts
要获得此结果:
11111
22222
33333
但我需要有这个结果:
11111, 22222, 33333
我在XML PATH中看到了一些示例,但我无法将其改编为我的代码。有人可以帮我查询一下吗?
答案 0 :(得分:2)
STUFF
+ XML PATH
将完成这项工作:
SELECT STUFF(
(SELECT Distinct ',' + cast (name as varchar(20))
FROM contacts
FOR XML PATH (''))
, 1, 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可能会影响名称的顺序。这对你来说可能有关,也可能没有关系。