2011-06-03 52 views
0

我在存储过程中有一个表变量。我想要的是在一列中查找所有的唯一值,并将它们加入逗号分隔的列表中。我已经在一个存储过程中,所以我可以这样做;然而,我很好奇,如果我可以用查询做到这一点。我是SQL Server 2008上此查询获取我我想要的值:SQL查询到列表

SELECT DISTINCT faultType FROM @simFaults; 

有没有一种方法(使用CONCAT或类似的东西),在那里我能得到的列表作为一个逗号分隔值?

回答

2

这适用于我在测试数据集上。

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 

最后一部分是需要修剪尾随逗号。

+0

+1,你可以使用COALESCE方法避免为最后一部分需要: SELECT @MyCSV = COALESCE(@MyCSV + '', '')+ faulttype – AdaTheDev 2011-06-03 14:43:59

2

+1到JNK - 其他常见的方式,你会看到,它不需要一个变量是:

SELECT DISTINCT faulttype + ',' 
FROM @simfaults 
FOR XML PATH ('') 

注意,如果faulttype包含像“<”例如字符,这些将是XML编码。但对于简单的值,这将是确定的。

+0

我接受JNK的答案,因为它允许我修剪最后一个逗号。 +1虽然你的答案,非常酷。 – Nik 2011-06-03 14:46:10

0

这是我们如何做到这一点

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, '')