如何在SQL Server中将多行合并为带JSON列的单行?
在SQL Server中合并多行JSON数据为单行的实现方案
要实现将多行数据按指定字段分组,并把每组的measurements列JSON合并为单个JSON对象,可以利用SQL Server的JSON处理函数组合完成,具体方案如下:
实现脚本
SELECT studyid AS studyId, eye, ( SELECT [key], value FROM YourTableName t2 CROSS APPLY OPENJSON(t2.measurements) WHERE t2.studyid = t1.studyid AND t2.eye = t1.eye AND t2.subjectref = t1.subjectref AND t2.source = t1.source AND t2.dateOn = t1.dateOn FOR JSON PATH, WITHOUT_ARRAY_WRAPPER ) AS measurements, subjectref, source, dateOn FROM YourTableName t1 GROUP BY studyid, eye, subjectref, source, dateOn;
逻辑说明
- 分组依据:外层查询按
studyid、eye、subjectref、source、dateOn这几个字段分组,这些字段是确定输出唯一行的标识,和期望的输出结构对应。 - 解析JSON:子查询里用
OPENJSON把每组内每行的measurementsJSON字符串拆成键值对(key对应JSON属性名,value对应属性值)。 - 合并JSON:通过
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER把所有键值对重新组合成一个无外层数组的JSON对象,实现多JSON属性的合并。
注意事项
- 替换脚本中的
YourTableName为你的实际表名。 - 如果不同行的
measurements存在重复的JSON键,合并后会保留最后出现的那个键值,SQL Server的FOR JSON会自动覆盖重复键。 - 确保
measurements列的内容是合法JSON格式,否则OPENJSON会抛出解析错误。
内容的提问来源于stack exchange,提问作者cva
相关产品推荐
相关产品推荐

