0

I have a table input like

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

I need output like this:

column1 |column2
--------+-------
  1     | A
  2     | B
  3     | C 
  4     | D
  5     | E
  6     | F
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459

1 Answers1

0

You question is quite unclear, but my magic crystal ball tells me, that you might be looking for something like this:

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

The result

ID  c1  c2
1   1   A
1   2   B
1   3   C
2   4   D
2   5   E
2   6   F
Shnugo
  • 66,100
  • 9
  • 53
  • 114