Это нужно поставить на первое место: не хранить данные с разделителями! Если есть возможность изменить дизайн вашей таблицы, вы должны использовать соответствующие дополнительные таблицы для хранения данных такого рода ...
Ваш вопрос не намного лучше, чем предыдущий. Без вашего ожидаемого результата любое предложение должно быть угаданным.
Что я предполагаю: вы хотите преобразовать 'Maths,Science,English', 'US,UK,AUS'
таким образом, чтобы математика соответствовала США, Наука вместе с Великобританией и английским соответствовала AUS. Попробуйте это
SELECT sc.ID
,sc.Student
,A.[key] AS Position
,A.[value] AS Class
,B.[value] AS CCode
FROM #StudentClasses sc
CROSS APPLY OPENJSON('["' + REPLACE(Classes,',','","') + '"]') A
CROSS APPLY OPENJSON('["' + REPLACE(CCode,',','","') + '"]') B
WHERE A.[key]=B.[key];
Вы не сообщили нам версию своего SQL Server ... Но вы пометили с помощью Azure. Поэтому я предполагаю, что v2016 подходит для вас. При более низкой версии (или более низком уровне совместимости данной базы данных) поддержка JSON отсутствует.
Почему вообще JSON? На данный момент это лучший способ разделить данные CSV и собрать фрагменты вместе с их позицией в массиве. К сожалению STRING_SPLIT()
не гарантирует возврат ожидаемого заказа. С версиями ниже v2016 есть несколько более или менее уродливых трюков ...
Если вам нужен ваш результат рядом , вам следует прочитать о условной агрегации .