如何将值转移到SQL Server中的下一行?

时间:2017-03-20 08:51:41

标签: sql-server

我有一个像

这样的表格输入
column1 | column2 
--------+--------
1,2,3   | A,B,C
4,5,6   | D,E,F

我需要这样的输出:

column1 |column2
--------+-------
  1     | A
  2     | B
  3     | C 
  4     | D
  5     | E
  6     | F

1 个答案:

答案 0 :(得分:0)

你的问题很不清楚,但我的魔法水晶球告诉我,你可能正在寻找这样的东西:

DECLARE @tbl TABLE(ID INT IDENTITY,column1 VARCHAR(100),column2 VARCHAR(100))
INSERT INTO @tbl VALUES
 ('1,2,3','A,B,C')
,('4,5,6','D,E,F');

WITH Casted AS
(
    SELECT ID
          ,CAST('<x>' + REPLACE(column1,',','</x><x>')+'</x>' AS XML) AS col1XML
          ,CAST('<x>' + REPLACE(column2,',','</x><x>')+'</x>' AS XML) AS col2XML
    FROM @tbl
)
SELECT ID,col1XML.value('/x[1]','int') AS Column1,col2XML.value('/x[1]','nvarchar(max)') AS Column2
FROM Casted 
UNION ALL
SELECT ID,col1XML.value('/x[2]','int') AS Column1,col2XML.value('/x[2]','nvarchar(max)') AS Column2
FROM Casted 
UNION ALL
SELECT ID,col1XML.value('/x[3]','int') AS Column1,col2XML.value('/x[3]','nvarchar(max)') AS Column2
FROM Casted 
ORDER BY ID,Column1

结果

ID  c1  c2
1   1   A
1   2   B
1   3   C
2   4   D
2   5   E
2   6   F