Используется DelimitedSplit8K
, поскольку требуется информация о порядковом положении (что-то STRING_SPLIT
и многие другие сплиттеры не предоставляют). Ниже приведен псевдо-SQL, так как OP предоставляет изображения, а не текстовые данные:
SELECT {YourColumns}
FROM YourTable YT
CROSS APPLY dbo.DelimitedSplit8K(YT.Qualification,',') DSq
CROSS APPLY dbo.DelimitedSplit8K(YT.Instituion,',') DSi
WHERE DSq.ItemNumber = DSi.ItemNumber;
Настоящий ответ здесь, как уже упоминалось в комментариях, заключается в исправлении модели данных.
Альтернативным методом будет использование OPENJSON
. Это то, что я только недавно представил, и у меня нет доступа к экземпляру SQL Server 2016, чтобы проверить это (я использовал SQL Fiddle, чтобы проверить, что он работает, но не по образу, предоставленному по той же причине). выше). Я полагаю, что это также должно достичь вашей цели:
SELECT OJq.[value], OJi.[Value]
FROM YourTable YT
CROSS APPLY (SELECT ca.[Key], ca.[value]
FROM OPENJSON('["' + REPLACE(YT.Qualification,',','","') + '"]') ca) OJq
CROSS APPLY (SELECT ca.[Key], ca.[value]
FROM OPENJSON('["' + REPLACE(YT.Instituion,',','","') + '"]') ca) OJi
WHERE OJq.[Key] = OJi.[Key];