2016-04-12 6 views
2

У меня есть данные в моей таблице, как показано ниже в разделе. Мне нужны данные о выбранных столбцах, которые разделены запятой, чтобы быть преобразованными в формат, обозначенный зеленым (чтение и запись категории вместе) enter image description hereРазделить данные столбца на несколько строк

Любые способы сделать это на SQL Server?

Пожалуйста, внимательно изучите данные предложения .... Возможно, я раньше не был чист, это не просто разделение, это проблема, но группировать все чтения и записи категории вместе (иногда они просто читаются/write), а не просто помещать значения, разделенные запятыми, в несколько строк.

-- script: 
    use master 
    Create table prodLines(id int , prodlines varchar(1000)) 
    --drop table prodLines 
    insert into prodLines values(1, 'Automotive Coatings (Read), Automotive Coatings (Write), Industrial Coatings (Read), S.P.S. (Read), Shared PL''s (Read)') 
    insert into prodLines values(2, 'Automotive Coatings (Read), Automotive Coatings (Write), Industrial Coatings (Read), S.P.S. (Read), Shared PL''s (Read)') 

    select * from prodLines 
+0

вы пытались искать его? есть много таких примеров, которые когда-либо спрашивали в SO. https://www.google.com.sg/#q=split+csv+string+to+rows+in+sql+server – Squirrel

+0

Вместо публикации изображения отправьте расписание для создания и вставки для работы с нами. –

+0

См. Мои правки, я попытался объяснить, почему это не то же самое –

ответ

2

Использование Джеффа 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) 
+0

Невозможно заставить выше работать, есть ли у вас весь работоспособный скрипт? –

+0

Это полный запрос. Вы создали функцию 'DelimitedSplit8K'? – Squirrel

+0

спасибо, функция delimitedsplit8k хорошо работала –

1

Взгляните на STRING_SPLIT, Вы можете сделать что-то вроде:

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

или что когда-либо вы заботитесь о.

+0

См. Мои правки –

+0

Обратите внимание, что 'STRING_SPLIT' доступен только на сервере sql 2016 или Лазурь. –

+0

hmm, my is 2008, так вот выходит из окна –