2011-03-02 46 views
1

Supose我有以下類型的數據表:如何編寫sql來從多行中轉換一個字符串?

Tab(id, myString) 
1 A 
2 B 
3 C 
... 

我想一個SQL可以返回在列myString的所有值都是一個字符串。所以我想要的結果如下所示:「A,B,C」

如果我不想使用遊標和存儲過程,是否有可能得到這樣的結果?

回答

1
Declare @tbl table(ID nvarchar(1),[myString] nvarchar(100)) 
Insert into @tbl values(1,'A'); 
Insert into @tbl values(2,'B'); 
Insert into @tbl values(3,'C'); 
DECLARE @CSVList varchar(100) 

SELECT @CSVList = COALESCE(@CSVList + ' , ', '') + 
    [myString] 
FROM @tbl 


SELECT @CSVList 
2

使用T-SQL行級聯:

declare @s varchar(max) 
set @s = '' 
select @s = @s + 
case when @s = '' then '' else ', ' end + Letter 
from MyTable 

select @s 

編輯除去後 「」

2

使用FOR XML PATH(提供一個空元素名)和STUFF的組合是一個常見的SQL Server( 2005+)技術。它不需要聲明任何局部變量,因此可以在批處理或過程之外運行。

SELECT STUFF(
(SELECT ',' + t.myString 
FROM TAB t 
ORDER BY t.Id 
FOR XML PATH('')),1,1,'') AS CSV 
相關問題