Here you go
Declare @str1 varchar(20) = 'A,B,C,D'
Declare @str2 varchar(20) = '1,2,3,4'
Declare @delimiter char(1) = ','
;with cte1 as(
SELECT
ItemNumber = ROW_NUMBER() OVER(ORDER BY(SELECT 1))
,APLHA = Split.a.value('.', 'VARCHAR(100)')
FROM
(
SELECT
CAST('<X>' + REPLACE(@str1, @delimiter , '</X><X>') + '</X>' AS XML) AS Splitdata
) X
CROSS APPLY Splitdata.nodes('/X') Split(a)),
cte2 as(
SELECT
ItemNumber = ROW_NUMBER() OVER(ORDER BY(SELECT 1))
,NUMB = Split.a.value('.', 'VARCHAR(100)')
FROM
(
SELECT
CAST('<X>' + REPLACE(@str2, @delimiter , '</X><X>') + '</X>' AS XML) AS Splitdata
) X
CROSS APPLY Splitdata.nodes('/X') Split(a))
select c1.APLHA,c2.NUMB
from cte1 c1
join cte2 c2 on c1.ItemNumber = c2.ItemNumber
You can use a function to avoid writing the code twice [ left for you as an exercise (: ]
You can also look into: http://www.dotnetfunda.com/codes/code1797-split-function-in-sql-server-using-set-base-approach.aspx
Best Regards,
Niladri Biswas
Nandkishorre, if this helps please login to Mark As Answer. | Alert Moderator