这使用DelimitedSplit8K
,因为需要关于序数位置的信息(STRING_SPLIT
和许多其他分离器不提供的东西)。以下是Pseudo 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];