値にコンマ区切りがある列の各値を取得するにはどうすればよいですか?
例:
ID ColumnUnified
1 12,34,56,78
2 80,99,70,56
私が欲しいのは、コンマなしで数値を取得するクエリです。できればコラムで。
12 34 56 78
これは、任意の数の値に対して機能しますhttp://beyondrelational.com/modules/2/blogs/70/posts/10844/splitting-delimited-data-to-columns-set-based-approach.aspx
Madhivanan のリンクが参照しているソリューションは非常に独創的ですが、SQL Server 2012 では、列の 1 つの名前 (Start) に関連して少し問題がありました。列名のStartPos
代わりに使用するように、彼の回答のコードを変更しました。Start
私はシステム手順に精通していませんでしたが、このソリューションがどのように機能するかに興味がある人のために、SO で手順spt_values
の非常に有益な説明を見つけました。
最後に、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