我在存储过程中有一个表变量。我想要的是在一列中查找所有的唯一值,并将它们加入逗号分隔的列表中。我已经在一个存储过程中,所以我可以这样做;然而,我很好奇,如果我可以用查询做到这一点。我是SQL Server 2008上此查询获取我我想要的值:SQL查询到列表
SELECT DISTINCT faultType FROM @simFaults;
有没有一种方法(使用CONCAT或类似的东西),在那里我能得到的列表作为一个逗号分隔值?
我在存储过程中有一个表变量。我想要的是在一列中查找所有的唯一值,并将它们加入逗号分隔的列表中。我已经在一个存储过程中,所以我可以这样做;然而,我很好奇,如果我可以用查询做到这一点。我是SQL Server 2008上此查询获取我我想要的值:SQL查询到列表
SELECT DISTINCT faultType FROM @simFaults;
有没有一种方法(使用CONCAT或类似的东西),在那里我能得到的列表作为一个逗号分隔值?
这适用于我在测试数据集上。
DECLARE @MyCSV Varchar(200) = ''
SELECT @MyCSV = @MyCSV +
CAST(faulttype AS Varchar) + ','
FROM @Simfaults
GROUP BY faultType
SET @MyCSV = LEFT(@MyCSV, LEN(@MyCSV) - 1)
SELECT @MyCSV
最后一部分是需要修剪尾随逗号。
+1到JNK - 其他常见的方式,你会看到,它不需要一个变量是:
SELECT DISTINCT faulttype + ','
FROM @simfaults
FOR XML PATH ('')
注意,如果faulttype包含像“<”例如字符,这些将是XML编码。但对于简单的值,这将是确定的。
我接受JNK的答案,因为它允许我修剪最后一个逗号。 +1虽然你的答案,非常酷。 – Nik 2011-06-03 14:46:10
这是我们如何做到这一点
create table #test (item int)
insert into #test
values(1),(2),(3)
select STUFF((SELECT ', ' + cast(Item as nvarchar)
FROM #test
FOR XML PATH('')), 1, 2, '')
没有逗号这将是以后的空间;
select STUFF((SELECT ',' + cast(Item as nvarchar)
FROM #test
FOR XML PATH('')), 1,1, '')
+1,你可以使用COALESCE方法避免为最后一部分需要: SELECT @MyCSV = COALESCE(@MyCSV + '', '')+ faulttype – AdaTheDev 2011-06-03 14:43:59