使用TSQL將類特殊符號、,等符號,一列資料轉為多筆(類似split功能)
先前轉檔時,用到的TSQL,就在這邊獻醜,方法硬了點,希望大家再給一些建議或更好的方法
先前轉檔時,用到的TSQL,就在這邊獻醜,方法硬了點,希望大家再給一些建議。
首先資料內有許多屬性,客戶那邊轉來的Excel呈現到SQL就類似
在第12列中,可以看到這因該是一個一對多的連結,所有會有一個資料表專門存這些屬性,
(原始資料中最後沒有 、 符號,是特別為了等一回的程式先加上去的)
第一難題就來了,左想又想,放了颱風假回家想,要如何把資料先從一列變成多列,
在新增回去呢?
第一個想到就是用C#把資料先叫出來再透過 Split 丟到陣列內,這因該是最快的方法,
但心裡想想,T-SQL 一定可以做的到,只是還沒想到,就六日在家想了想,突然想到可以透過
CTE + while 回圈 試看看。
首先呢,因為我的 while 判讀跟拿資料會需要配合資料 、 這個符號,就直接先把每筆資料後面都加上了、
在來步驟如下
-- DECLARE @ArrayList varchar(3000) SET @ArrayList= '平版、塊狀、捲、網狀、粉末' DECLARE @ans Varchar(100) -- 當資料有、符號就做處理
WHILE (charindex('!B',@ArrayList)<>0) BEGIN -- 2.取出我要的部分忽略、 SET @ans = SUBSTRING(@ArrayList,0,Charindex('!B',@ArrayList)) PRINT 'ans:'+@ans --塞資料到暫時處理分類的Table
--將資料取道第一個資料列
SET @ArrayList = RIGHT(@ArrayList,len(@ArrayList)-Charindex('!B',@ArrayList)) print 'GroupName:' + @ArrayList end 這樣就能看出這樣的效果
在 print 改成INSERT INTO 就能夠把這些屬性一筆一筆先塞入暫時的屬性資料表,
在DISTINCT 後,就能夠真正的塞入真正資料表了。