You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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;

逻辑说明

  1. 分组依据:外层查询按studyid、eye、subjectref、source、dateOn这几个字段分组,这些字段是确定输出唯一行的标识,和期望的输出结构对应。
  2. 解析JSON:子查询里用OPENJSON把每组内每行的measurements JSON字符串拆成键值对(key对应JSON属性名,value对应属性值)。
  3. 合并JSON:通过FOR JSON PATH, WITHOUT_ARRAY_WRAPPER把所有键值对重新组合成一个无外层数组的JSON对象,实现多JSON属性的合并。

注意事项

  • 替换脚本中的YourTableName为你的实际表名。
  • 如果不同行的measurements存在重复的JSON键,合并后会保留最后出现的那个键值,SQL Server的FOR JSON会自动覆盖重复键。
  • 确保measurements列的内容是合法JSON格式,否则OPENJSON会抛出解析错误。

内容的提问来源于stack exchange,提问作者cva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 03:55:17