2017-04-12 84 views
-3

源表:如何分割逗號分隔值成列

Value |name 

1  |clar,alwin,antony,rinu,dami,prince 

預期輸出:

Value | name1 | name2 | name3 | name4 | name5 | name6 
1  | clar | alwin | antony | rinu | dami | prince 

嘗試這樣的查詢:

Select Substring(name, 1,Charindex(',', name1) as name1, 
Substring(name,1, Charindex(',', name)+1, LEN(name)) as name2, 
Substring(name, Charindex(',', name)+2, LEN(name)) as name3, 
Substring(name, Charindex(',', name)+3, LEN(name)) as name4 
from tablename; 
+1

以前被問過很多次,也許試試搜索?! – Tanner

+0

你甚至找到它(我不是downvoter)。 –

回答

1
first create function to split values 

create function [dbo].[udf_splitstring] (@tokens varchar(max), 
            @delimiter varchar(5)) 
returns @split table (
    token varchar(200) not null) 
as 



    begin 

     declare @list xml 

     select @list = cast('<a>' 
          + replace(@tokens, @delimiter, '</a><a>') 
          + '</a>' as xml) 

     insert into @split 
        (token) 
     select ltrim(t.value('.', 'varchar(200)')) as data 
     from @list.nodes('/a') as x(t) 

     return 

    end 

SELECT 
max(CASE WHEN TOKEN='CLAR' THEN TOKEN END) 'NAME1' , 
max(CASE WHEN TOKEN='ALWIN' THEN TOKEN END) 'NAME2', 
max(CASE WHEN TOKEN='ANTONY' THEN TOKEN END) 'NAME3', 
max(CASE WHEN TOKEN='RINU' THEN TOKEN END) 'NAME4', 
max(CASE WHEN TOKEN='DAMI' THEN TOKEN END) 'NAME5', 
max(CASE WHEN TOKEN='PRINCE' THEN TOKEN END) 'NAME6' 
FROM #Table1 as t1 
CROSS APPLY [dbo].UDF_SPLITSTRING(name,',') as t2 

輸出

NAME1 NAME2 NAME3 NAME4 NAME5 NAME6 
clar alwin antony rinu dami prince 
1

IDK如果這會幫助你,但我這是怎麼安排我的CSV文件
PS:Accourding您的數據

值,1,名稱2,名稱3,名稱4,NAME5,name6
0 ,CLAR,阿爾文,安東尼,rinu,DAMI,王子


當我使用byulk插入你只需要說

BULK INSERT TableName FROM 'Location\filename.csv' WITH (ROWTERMINATOR = '\n', FIELDTERMINATOR = ',', FIRSTROW = 2)