2016-08-05 5 views
1

Я написал запрос, который возвращает таблицу (tb1) с строками данных. В одном столбце показан список очередей, над которыми аналитик может работать, а другие столбцы показывают, сколько аналитиков доступно для работы в этих очередях и сколько их осталось.SQL Server 2014 - Как разбить строку запятыми на несколько строк?

Теперь мне нужно обернуть этот запрос в другой, чтобы он возвращал строку, разбитую на несколько строк, каждая из которых показывала, сколько аналитиков доступно/в очереди.

table 1

ОБНОВЛЕНИЕ - я создал этот пост, когда есть подобные них там, так как столбец очереди является ключом, который должен быть разделен на отдельные строки друг с теми же данными из другой (выгоды /), когда это была всего одна строка. Чтобы добавить сложность, могут быть несколько строк с более/меньшими именами очередей, которые нуждаются в группировке. пример обновлен.

+0

Покажите нам запрос, который вы написали – kbball

+2

HTTP://stackoverflow.com/questions/5493510/turn-a-comma-separated-string-in-individual-rows –

ответ

2

Это мой udf. Там много вариаций. Что мне нравится это одним вы получаете порядковый номер

EDIT:

К сожалению, я не видел изображения. Но с помощью Креста Применить

Declare @YourTable table (id int,SomeField varchar(50)) 
Insert into @YourTable values 
(1,'Smith,John'), 
(2,'Doe,Jane') 

Select A.ID 
     ,YourNewFieldName=B.Key_Value 
    From @YourTable A 
    Cross Apply (Select * from [dbo].[udf-Str-Parse](A.SomeField,',')) B 

Возвращает

ID YourNewFieldName 
1 Smith 
1 John 
2 Doe 
2 Jane 

ОДС

CREATE FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10)) 
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',') 
--  Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ') 
--  Select * from [dbo].[udf-Str-Parse]('id26,id46|id658,id967','|') 
--  Select * from [dbo].[udf-Str-Parse]('hello world. It. is. . raining.today','.') 

Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max)) 
As 
Begin 
    Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML) 
    Insert Into @ReturnTable Select Key_Value = ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String) 
    Return 
End 

Sample Return

Key_PS Key_Value 
1  Dog 
2  Cat 
3  House 
4  Car 
+0

Будет проверять вашу функцию, но застревает с именами очередей в качестве идентификатора. Я обновил свой основной пост, поскольку он был слишком похож на других. – Talbius

Смежные вопросы