SQL Server从存储JSON数组的表统计各Optionsid对应答案数
遍历JSON数组实现统计的可行方案
核心实现思路是通过SQL Server内置的OPENJSON函数将JSON字段内的Answer数组展开为独立行,再按原逻辑分组统计,完全还原原关系表的统计结果。
完整查询语句
SELECT COUNT(answer_item.Pid) AS Counted, answer_item.OptionsId FROM [PidJson] CROSS APPLY OPENJSON([PidJson].[json], '$.Answer') WITH ( Pid INT '$.Pid', OptionsId INT '$.Optionsid', [Column] VARCHAR(100) '$.Column' ) AS answer_item GROUP BY answer_item.[Column], answer_item.OptionsId
逻辑说明
CROSS APPLY关联OPENJSON返回的结果集,作用是对PidJson表的每一行数据,都将其json字段中存储的Answer数组拆分为若干独立行,每一行对应数组中的一个答案元素WITH子句可直接将JSON元素的属性映射为结构化的关系列,无需多次调用JSON_VALUE提取字段,性能和可读性更高- 最后的分组逻辑和原Answer关系表的统计逻辑完全一致,最终输出的统计结果和你之前得到的Optionsid为1、2、3对应Counted为2、2、1完全匹配
如果你的字段实际类型和示例中声明的INT、VARCHAR不符,调整WITH子句中的字段类型即可。
内容的提问来源于stack exchange,提问作者hakan
相关产品推荐
相关产品推荐

