使用#Temp表來存儲解析結果。或許你可以遷移到CTE
Declare @YourTable table (ID int,Data varchar(max))
Insert Into @YourTable values
(1,'abc,def'),
(2,'def,abc'),
(3,'def,ghi')
Select A.ID
,B.*
,ColName = 'Data'+cast(DENSE_RANK() over (Order By RetVal) as varchar(25))
Into #Temp
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(A.Data,',','</x><x>')+'</x>' as xml).query('.')) as A
Cross Apply x.nodes('x') AS B(i)
) B
Declare @SQL varchar(max)
Select @SQL = Stuff((Select Distinct ',' + QuoteName(ColName) From #Temp For XML Path('')),1,1,'')
Select @SQL = 'Select ID,' + @SQL + '
From (Select ID,ColName,RetVal From #Temp) A
Pivot (max(RetVal) For ColName in (' + @SQL + ')) p'
Exec(@SQL);
返回
ID Data1 Data2 Data3
1 abc def NULL
2 abc def NULL
3 NULL def ghi
這背後有什麼邏輯? – Jens
爲什麼'Data1'對於最後一行是「NULL」? –
我想知道如何從一列中的字符串中取出一個特定的值,例如'def'並將其放入一個單獨的列中,這可能嗎? –