在SQL語句(或過程)中,我想將此表的行摺疊爲一個逗號分隔的字符串。將SELECT的行摺疊爲字符串的最佳方式是什麼?
simpleTable
id value
-- -----
1 "a"
2 "b"
3 "c"
崩潰:
"a, b, c"
在SQL語句(或過程)中,我想將此表的行摺疊爲一個逗號分隔的字符串。將SELECT的行摺疊爲字符串的最佳方式是什麼?
simpleTable
id value
-- -----
1 "a"
2 "b"
3 "c"
崩潰:
"a, b, c"
您可以在查詢串聯使用嵌入的 '設置' 聲明:
declare @combined varchar(2000) select @combined = isnull(@combined + ', ','') + isnull(value,'') from simpleTable print @combined
(注意,第一個ISNULL()初始化字符串,而第二個isnull()尤其重要,如果'值'列中有任何空值的情況,否則單個空值可能會消除整個級聯)
(評論後編輯的代碼和說明)
DECLARE @EmployeeList varchar(100)
SELECT @EmployeeList = COALESCE(@EmployeeList + ', ', '') +
CAST(Emp_UniqueID AS varchar(5))
FROM SalesCallsEmployees
WHERE SalCal_UniqueID = 1
SELECT @EmployeeList
結果:
1, 2, 4
這隻會在MSSQL工作2005+
select value + ',' from simpletable for xml path ('')
..one方法,以防止多餘的逗號:
select case(row_number() over (order by id))
when 1 then value else ',' + value end
from simpletable
for xml path ('')
這是基於@codeulike的答案,但會防止在連接空值「值」之前丟失連接的字符串部分。
declare @combined varchar(2000)
select @combined = isnull(@combined + ', ','') + ISNULL(value,'')
from simpleTable
print @combined
甜美!我沒有意識到你可以做到這一點。我總是認爲設置和選擇工作是一樣的分配。 – 2009-05-05 02:18:03
你可能希望使它成爲「+ ISNULL(value,'')」,因爲「+ value」會將空字符串的任何部分清零,並且空值爲 – 2009-05-05 20:42:20