1. 程式人生 > 實用技巧 >SQL SERVER 逗號分隔列進行行列轉換

SQL SERVER 逗號分隔列進行行列轉換

在現實應用中,有時我們需要用到將資料庫表中逗號分隔的列,進行列轉行;現在列舉出其中比較常用的一種,利用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 (
'.', '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

--4 刪除臨時表
DROP TABLE #TMP

將逗號分隔列,進行列轉行的方法應該還有其他,有興趣的可以研究下。