将列数据拆分为多行

时间:2016-04-12 06:31:53

标签: sql sql-server sql-server-2008-r2

我目前在我的表格中有数据,如下所示。我需要以逗号分隔的选定列数据转换为绿色标记的格式(一起读取和写入类别) enter image description here

在SQL Server中有什么办法吗?

请仔细查看提案数据.... 也许我之前并不清楚,这不仅仅是分裂问题,而是将一个类别的所有读写组合在一起(有时它们只是读/写),它不仅仅是将逗号分隔的值放在多行中。

{{1}}

3 个答案:

答案 0 :(得分:2)

使用Jeff的DelimitedSplit8K

; 
with cte as
(
    select  id, prodlines, ItemNumber, Item = ltrim(Item),
        grp = dense_rank() over (partition by id order by replace(replace(ltrim(Item), '(Read)', ''), '(Write)', ''))
    from    #prodLines pl
        cross apply dbo.DelimitedSplit8K(prodlines, ',') c
)
select  id, prodlines, prod = stuff(prod, 1, 1, '')
from    cte c
    cross apply
    (
        select  ',' + Item
        from    cte x
        where   x.id    = c.id
        and x.grp   = c.grp
        order by x.Item
        for xml path('')
    ) i (prod)

答案 1 :(得分:1)

看看STRING_SPLIT,您可以执行以下操作:

SELECT user_access
FROM Product
CROSS APPLY STRING_SPLIT(user_access, ',');

或者你在乎什么。

答案 2 :(得分:0)

只需使用横向视图爆炸功能:

select access  from Product
LATERAL VIEW explode(split(user_access, '[,]')) usrAccTable AS access;