SQL SERVER 逗號分隔列進行行列轉換
阿新 • • 發佈:2020-10-10
在現實應用中,有時我們需要用到將資料庫表中逗號分隔的列,進行列轉行;現在列舉出其中比較常用的一種,利用XML來轉換(利用XML進行列轉行)。
如下圖:資料庫表中,一列或者多列有都好分隔的資料轉換為行資料。
首先我們先看看轉換前後對比:
轉換前: ------> 轉換後:
轉換過程如下:
--1,準備工作:先創先使用的表,並插入資料
CREATE TABLE #TMP ( FIX NVARCHAR(20 ), CODE1 NVARCHAR(200 ), CODE2 NVARCHAR(200 ) ) INSERT INTO #TMP VALUES ( 'A001','001' ,'AAA,BBB,CCC') INSERT INTO #TMP VALUES ( 'A002','002,003' ,'AAA,BBB,CCC') --SELECT * FROM #TMP -- 檢視資料
--2中間過程,現將錶轉換為 XML格式
SELECT T.FIX ,CODE1 = CONVERT(XML ,'<V>'+ REPLACE(T .CODE1, ',','</V><V>' )+'</V>') ,CODE2 = CONVERT(XML ,'<V>'+ REPLACE(T .CODE2, ',','</V><V>' )+'</V>') FROM #TMP T--3拆分過程,拆分結果
SELECT T .FIX ,A. X.value (--4 刪除臨時表'.', 'VARCHAR(20)') AS CODE1 ,B. X.value ('.', 'VARCHAR(20)') AS CODE2 FROM ( SELECT T.FIX ,CODE1 = CONVERT(XML ,'<V>'+ REPLACE(T .CODE1, ',','</V><V>' )+'</V>') ,CODE2 = CONVERT(XML ,'<V>'+ REPLACE(T .CODE2, ',','</V><V>' )+'</V>') FROM #TMP T ) AS T CROSS APPLY CODE1.nodes ('//V') AS A (X) CROSS APPLY CODE2.nodes ('//V') AS B (X) ORDER BY T.FIX
DROP TABLE #TMP將逗號分隔列,進行列轉行的方法應該還有其他,有興趣的可以研究下。