Supose我有以下類型的數據表:如何編寫sql來從多行中轉換一個字符串?
Tab(id, myString)
1 A
2 B
3 C
...
我想一個SQL可以返回在列myString的所有值都是一個字符串。所以我想要的結果如下所示:「A,B,C」
如果我不想使用遊標和存儲過程,是否有可能得到這樣的結果?
Supose我有以下類型的數據表:如何編寫sql來從多行中轉換一個字符串?
Tab(id, myString)
1 A
2 B
3 C
...
我想一個SQL可以返回在列myString的所有值都是一個字符串。所以我想要的結果如下所示:「A,B,C」
如果我不想使用遊標和存儲過程,是否有可能得到這樣的結果?
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
使用T-SQL行級聯:
declare @s varchar(max)
set @s = ''
select @s = @s +
case when @s = '' then '' else ', ' end + Letter
from MyTable
select @s
編輯除去後 「」
使用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