2017-02-13 2 views
-3

У меня есть таблица, и мне нужно разделить данные на несколько колонок:Как отделить от 1 колонки в несколько колонок SQL Server

"Site Name","PJ.143 USJ 1| 2A (MP)","PMAC ID:","0067","Channel No:","01" 

Как отделить от 1 столбца на несколько столбцов в SQL Server?

Спасибо.

+1

* Не * значения магазин как это в первую очередь , Это нарушение 1-й нормальной формы и создание множества проблем, например, невозможно индексировать такой столбец или обновить его. –

+1

, пожалуйста, поделитесь ожидаемым выходом – TheGameiswar

+0

. Вы можете использовать функцию [STRING_SPLIT] (https://msdn.microsoft.com/en-us/library/mt684588.aspx) в SQL Server 2016 и более поздних версиях. –

ответ

0

Такой подход не требует Split/Синтаксическая UDF

Пример

Declare @YourTable table (ID int,SomeColumn varchar(max)) 
Insert Into @YourTable values 
(1,'"Site Name","PJ.143 USJ 1| 2A (MP)","PMAC ID:","0067","Channel No:","01"') 

Select A.ID 
     ,Col1 = max(case when RetSeq=2 then RetVal end) 
     ,Col2 = max(case when RetSeq=4 then RetVal end) 
     ,Col3 = max(case when RetSeq=6 then RetVal end) 
From @YourTable A 
Cross Apply (
       Select RetSeq = Row_Number() over (Order By (Select null)) 
         ,RetVal = LTrim(RTrim(B.i.value('(./text())[1]', 'varchar(max)'))) 
       From (Select x = Cast('<x>' + replace((Select replace(replace(A.SomeColumn,'"',''),',','§§Split§§') as [*] For XML Path('')),'§§Split§§','</x><x>')+'</x>' as xml).query('.')) as X 
       Cross Apply x.nodes('x') AS B(i) 
      ) B  
Group By A.ID 

Возвращает

ID Col1     Col2 Col3 
1 PJ.143 USJ 1| 2A (MP) 0067 01 
+0

благодарит свои работы –

+0

@mohdnizam С удовольствием помог. –