I really do recommend you to use
Common Table Expressions[
^].
Try this:
DECLARE @tmp TABLE ([Parent Number] BIGINT, SNDDI VARCHAR(255), DDI VARCHAR(255))
INSERT INTO @tmp ([Parent Number], SNDDI, DDI)
SELECT 12457847549 AS [Parent Number], '24578487557,5559864127' AS SNDDI, '' AS DDI
UNION ALL SELECT 54876458722, '', '54685913487,46589857855'
;WITH sndis AS
(
SELECT [Parent Number], LEFT(SNDDI, CHARINDEX(',', SNDDI)-1) AS ChildNumber, 'SNDDI' AS TypeOfNumber, RIGHT(SNDDI, LEN(SNDDI)- CHARINDEX(',', SNDDI)) AS Remainder
FROM @tmp
WHERE CHARINDEX(',', SNDDI)>0
UNION ALL
SELECT [Parent Number], LEFT(Remainder, CHARINDEX(',', Remainder)-1) AS ChildNumber, 'SNDDI' AS TypeOfNumber, RIGHT(Remainder, LEN(Remainder)- CHARINDEX(',', Remainder)) AS Remainder
FROM sndis
WHERE CHARINDEX(',', Remainder)>0
UNION ALL
SELECT [Parent Number], Remainder AS ChildNumber, 'SNDDI' AS TypeOfNumber, NULL AS Remainder
FROM sndis
WHERE CHARINDEX(',', Remainder)=0
), ddis AS
(
SELECT [Parent Number], LEFT(DDI, CHARINDEX(',', DDI)-1) AS ChildNumber, 'DDI' AS TypeOfNumber, RIGHT(DDI, LEN(DDI)- CHARINDEX(',', DDI)) AS Remainder
FROM @tmp
WHERE CHARINDEX(',', DDI)>0
UNION ALL
SELECT [Parent Number], LEFT(Remainder, CHARINDEX(',', Remainder)-1) AS ChildNumber, 'DDI' AS TypeOfNumber, RIGHT(Remainder, LEN(Remainder)- CHARINDEX(',', Remainder)) AS Remainder
FROM ddis
WHERE CHARINDEX(',', Remainder)>0
UNION ALL
SELECT [Parent Number], Remainder AS ChildNumber, 'DDI' AS TypeOfNumber, NULL AS Remainder
FROM ddis
WHERE CHARINDEX(',', Remainder)=0
)
SELECT [Parent Number], ChildNumber, TypeOfNumber
FROM (
SELECT [Parent Number], ChildNumber, TypeOfNumber
FROM sndis
UNION ALL
SELECT [Parent Number], ChildNumber, TypeOfNumber
FROM ddis
) AS T
Result:
Parent Number ChildNumber TypeOfNumber
12457847549 24578487557 SNDDI
12457847549 5559864127 SNDDI
54876458722 54685913487 DDI
54876458722 46589857855 DDI
More:
Using Common Table Expressions[
^]
Recursive Queries Using Common Table Expressions[
^]