在SQL Server中将分隔的值逗号分隔成多行

时间:2018-09-03 09:44:37

标签: sql-server azure-sql-database

我有一个表,其中包含以下格式的数据 enter image description here

如何在MS SQL Server中实现这一目标。

1 个答案:

答案 0 :(得分:1)

此命令使用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];