Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中将逗号分隔的值转换为多行_Sql Server_Azure Sql Database - Fatal编程技术网

Sql server 在SQL Server中将逗号分隔的值转换为多行

Sql server 在SQL Server中将逗号分隔的值转换为多行,sql-server,azure-sql-database,Sql Server,Azure Sql Database,我有一个表,其中包含以下格式的数据 如何在MS SQL Server中实现这一点。这使用了,因为需要有关序号位置的信息,而字符串拆分和许多其他拆分器不提供这些信息。下面是伪SQL,因为OP提供了图像,而不是文本数据: SELECT {YourColumns} FROM YourTable YT CROSS APPLY dbo.DelimitedSplit8K(YT.Qualification,',') DSq CROSS APPLY dbo.DelimitedSplit8K

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

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

这使用了,因为需要有关序号位置的信息,而字符串拆分和许多其他拆分器不提供这些信息。下面是伪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];

您使用的是哪个版本的MS SQL Server?可能重复可能重复您搜索和编写此问题时向您提供的答案中可能有100个其他问题的错误所在?这不是重复,这是一个不同的问题,有多个列和多个值,使用错误的数据模型我想用分号替换逗号。我已将逗号替换为分号,但它会引发错误。:JSON文本格式不正确。意外字符“;”是在42号位置找到的。你知道吗。@Rambaskar你是什么意思?最终数据集中没有逗号。你的意思是在你的原始数据上,它现在被一个;不是一个,是的,现在分隔符是分号;我使用了您给出的查询,但在同一语句中,我使用replace函数将逗号替换为分号。@RamBhaskar,如果分隔符现在是a;然后只需将替换从a更改为;。使用从志愿者那里获得的SQL的一个重要部分是理解它;如果你没有,你就不应该使用它。在这里,更改分隔符是最简单的操作。