Как вы упомянули, вам нужна только логика разделения требуемых значений от объединенного значения, вы можете использовать SUBSTRING с помощью CHARINDEX для получения желаемых результатов. Некоторые примеры кодов приведены ниже -
SELECT name,
SUBSTRING(myFormat, (CHARINDEX(':',myFormat, 0))+1,(CHARINDEX(',',myFormat, 0))-((CHARINDEX(':',myFormat, 0))+1)),
SUBSTRING(myFormat, (CHARINDEX(':',myFormat,(CHARINDEX(':',myFormat,0))+1))+1,(CHARINDEX(',',myFormat, (CHARINDEX(',',myFormat, 0))+1))-((CHARINDEX(':',myFormat,(CHARINDEX(':',myFormat,0))+1))+1)),
SUBSTRING(myFormat,CHARINDEX(':',myFormat,CHARINDEX(':',myFormat,(CHARINDEX(':',myFormat,0))+1)+1)+1,LEN(myFormat))
FROM table2
Вывод этого скрипта для ваших примеров данных приведен ниже. Надеюсь, теперь вы можете настроить эту логику в своем скрипте.
ScoresOfAToC 10 20 30
ClassOfAToC 4 5 6
Чтобы получить все в одну строку, примените PIVOT, как показано ниже -
SELECT
SUBSTRING(ScoresOfAToC, (CHARINDEX(':',ScoresOfAToC, 0))+1,(CHARINDEX(',',ScoresOfAToC, 0))-((CHARINDEX(':',ScoresOfAToC, 0))+1)),
SUBSTRING(ScoresOfAToC, (CHARINDEX(':',ScoresOfAToC,(CHARINDEX(':',ScoresOfAToC,0))+1))+1,(CHARINDEX(',',ScoresOfAToC, (CHARINDEX(',',ScoresOfAToC, 0))+1))-((CHARINDEX(':',ScoresOfAToC,(CHARINDEX(':',ScoresOfAToC,0))+1))+1)),
SUBSTRING(ScoresOfAToC,CHARINDEX(':',ScoresOfAToC,CHARINDEX(':',ScoresOfAToC,(CHARINDEX(':',ScoresOfAToC,0))+1)+1)+1,LEN(ScoresOfAToC)),
SUBSTRING(ClassOfAToC, (CHARINDEX(':',ClassOfAToC, 0))+1,(CHARINDEX(',',ClassOfAToC, 0))-((CHARINDEX(':',ClassOfAToC, 0))+1)),
SUBSTRING(ClassOfAToC, (CHARINDEX(':',ClassOfAToC,(CHARINDEX(':',ClassOfAToC,0))+1))+1,(CHARINDEX(',',ClassOfAToC, (CHARINDEX(',',ClassOfAToC, 0))+1))-((CHARINDEX(':',ClassOfAToC,(CHARINDEX(':',ClassOfAToC,0))+1))+1)),
SUBSTRING(ClassOfAToC,CHARINDEX(':',ClassOfAToC,CHARINDEX(':',ClassOfAToC,(CHARINDEX(':',ClassOfAToC,0))+1)+1)+1,LEN(ScoresOfAToC)),
ScoresOfAToC,
ClassOfAToC
FROM
(
SELECT name,myFormat FROM table2
)AS A
PIVOT
(
MAX(myFormat) FOR Name in ([ScoresOfAToC],[ClassOfAToC])
)PVT