如何獲取其值爲逗號分隔符的列的每個值?獲取替換逗號分隔符的列的值
例子:
ID ColumnUnified
1 12,34,56,78
2 80,99,70,56
我要的是一個查詢來獲取數量,而不逗號。如果可能的話,在collumns中。
12 34 56 78
如何獲取其值爲逗號分隔符的列的每個值?獲取替換逗號分隔符的列的值
例子:
ID ColumnUnified
1 12,34,56,78
2 80,99,70,56
我要的是一個查詢來獲取數量,而不逗號。如果可能的話,在collumns中。
12 34 56 78
該解決方案Madhivanan的鏈接指向的工作是非常有創意,但我有一個小問題,它的SQL Server 2012相關的一個名稱列(開始)。我在他的答案中修改了代碼,使用StartPos
而不是Start
作爲列名。
我對系統程序spt_values
並不熟悉,但是對於那些對此解決方案的工作原理感興趣的人,我發現了一個非常豐富的description of the procedure here on SO。
最後,這裏是從Madhivana的回答(略)修改後的代碼:
CREATE TABLE #test(id int, data varchar(100))
INSERT INTO #test VALUES (1,'This,is,a,test,string')
INSERT INTO #test VALUES (2,'See,if,it,can,be,split,into,many,columns')
DECLARE @pivot varchar(8000)
DECLARE @select varchar(8000)
SELECT @pivot = COALESCE(@pivot + ',', '') + '[col'
+ CAST(number + 1 AS VARCHAR(10)) + ']'
FROM master..spt_values
WHERE type = 'p'
AND number <= (SELECT MAX(LEN(data) - LEN(REPLACE(data, ',', '')))
FROM #test
)
SELECT @select = '
select p.*
from (
select
id,substring(data, StartPos+2, endPos-StartPos-2) as token,
''col''+cast(row_number() over(partition by id order by StartPos) as varchar(10)) as n
from (
select
id, data, n as StartPos, charindex('','',data,n+2) endPos
from (select number as n from master..spt_values where type=''p'') num
cross join
(
select
id, '','' + data +'','' as data
from
#test
) m
where n < len(data)-1
and substring(data,n+1,1) = '','') as data
) pvt
Pivot (max(token)for n in (' + @pivot + '))p'
EXEC(@select)
DROP TABLE #test
始終將4個值用逗號分隔,野外? – 2012-07-27 12:59:25
您的數據庫結構違反了第一條規範化規則。你最好重新設計你的數據庫。 – 2012-07-27 13:00:36
有一個類似的問題在這裏..... http://stackoverflow.com/questions/697519/split-function-equivalent-in-tsql – 2012-07-27 13:00:52