2013-06-17 4 views
1

я в настоящее время делают некоторые исследования по добыче данных и моей таблицы данных исследований выглядит следующиеSplit Строка с Position ID

ID Author 
1 Ali,Ahmad,David,Kumar 
2 Aslam,Abid,John 

Теперь я хочу, чтобы разделить разделенные запятой имя авторов в несколько рядов с position_ID Для Пример

ID   Author   Position_ID 
1   Ali     1 
1   Ahmad    2 
1   David    3 
1   Kumar    4 
2   Aslam    1 
2   Shahzad    2 
2   John    3 

Я в настоящее время сделал сплит функцию и следующий запрос, который может расщепляет только значение столбцов автора в многоярусные, но не может получить автор position_ID в строке в отдельную колонку. Пожалуйста, дайте мне несколько советов.! [Введите описание изображения здесь] [1] Заранее спасибо

CREATE Function [dbo].[SplitString] 
(@List Varchar(Max), @Delimiter Char(1)) 
Returns @Items 
Table (Item Varchar(max)) 
As 
Begin 
Declare @Item Varchar(max), @Pos TinyInt 
While Len(@List) > 0 
Begin 
Set @Pos = CharIndex(@Delimiter, @List) 
If @Pos = 0 Set @Pos = Len(@List) + 1 
Set @Item = Left(@List, @Pos - 1) 
Insert @Items 
Select Ltrim(Rtrim(@Item)) 
Set @List = SubString(@List, @Pos + Len(@Delimiter), Len(@List)) 
End 
Return 
End 

declare @TAB table (strg varchar(max),Research_ID bigint) 
insert @TAB 
select authors,Research_ID from Citation 
Select S.item As [Authors],Research_ID 
From @TAB T 
Cross apply [dbo].[SplitString](T.strg,',') S; 
+0

Пль перейдите по следующей ссылке, чтобы просмотреть ответ на указанный выше вопрос. http://social.msdn.microsoft.com/Forums/sqlserver/en-US/678366ed-3d48-4778-bc9a-4bf50b394032/split-string-into-multiple -rows-с-позиционно-ID # 12c85a19-6b5f-4437-8b54-65aecd6a0488 – user2433263

ответ

1

Пожалуйста, попробуйте это

СОЗДАТЬ функцию [DBO]. [Listtorow2] (@ л VARCHAR (200), @ идентификатор INT) возвращает @csv таблицы (strdata VARCHAR (20), идентификатор INT, Position_ID целое) , как начинают

declare @xml xml 
    set @xml = '<root><record>' + replace(@l,',','</record><record>') + 
'</record></root>' 

    insert into @csv(strdata,id,Position_ID) 

select *,@id,ROW_NUMBER()OVER(ORDER BY (SELECT 1)) from(
select t.value('.','varchar(150)') as [items] 
from @xml.nodes('//root/record') as a(t)) data 

    return 
end 

go 

DECLARE @t TABLE(id INT,autor VARCHAR(50)) 
INSERT INTO @t(id,autor)values (1,'Ali,Ahmad,David,Kumar'),(2,'Aslam,Abid,John') 


SELECT t.id,strdata,Position_ID 
FROM @t t 
CROSS APPLY[dbo].[listtorow2](t.autor,id) t1