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。。