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 上遇到了与其中一列名称(开始)相关的小问题。我已经修改了他的答案中的代码来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 回答