2011-06-03 49 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, '')