0

値にコンマ区切りがある列の各値を取得するにはどうすればよいですか?

例:

ID   ColumnUnified
1    12,34,56,78
2    80,99,70,56

私が欲しいのは、コンマなしで数値を取得するクエリです。できればコラムで。

12    34     56    78
4

2 に答える 2

0

これは、任意の数の値に対して機能しますhttp://beyondrelational.com/modules/2/blogs/70/posts/10844/splitting-delimited-data-to-columns-set-based-approach.aspx

于 2012-07-27T13:04:31.430 に答える
0

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
于 2012-07-27T13:43:18.863 に答える