我在存儲過程中有一個表變量。我想要的是在一列中查找所有的唯一值,並將它們加入逗號分隔的列表中。我已經在一個存儲過程中,所以我可以這樣做;然而,我很好奇,如果我可以用查詢做到這一點。我是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