SQL Server查询JSONobject以获取聚合值
我在SQL Server中的SQL Server查询JSONobject以获取聚合值,sql,json,sql-server,Sql,Json,Sql Server,我在SQL Server中的nvarchar(max)列中存储了一个JSON对象。JSON如下所示: { "data": [{ "RespID": 3512, "ObsPriceValue": 2.34 }, { "RespID": 4904, "ObsPriceValue": 2.54 }, { "RespID": 5127, "ObsPriceValue": 3.44 }]
nvarchar(max)
列中存储了一个JSON对象。JSON如下所示:
{
"data": [{
"RespID": 3512,
"ObsPriceValue": 2.34
}, {
"RespID": 4904,
"ObsPriceValue": 2.54
}, {
"RespID": 5127,
"ObsPriceValue": 3.44
}]
}
上面的示例数组由三项组成,但我不知道记录中有多少项,它们可以是2项,也可以是30项
表中的每一行都有一个如上所示的对象
我想在一个查询中得到字段ObsPriceValue的平均值
我尝试过使用JSON\u QUERY
,但我总是要指定元素的索引
有没有办法获取它或者存储数据的JSON模式是错误的?下一种方法可能会有所帮助。您需要使用带有显式架构定义的
OPENJSON()
来返回包含obpricevalue
列的表:
JSON:
声明:
SELECT AVG(ObsPriceValue) AS AvgObsPriceValue
FROM OPENJSON(@json, '$.data') WITH (
ObsPriceValue numeric(10, 2) '$.ObsPriceValue'
) j
输出:
----------------
AvgObsPriceValue
----------------
2.773333
下一种方法可能会有所帮助。您需要使用带有显式架构定义的
OPENJSON()
来返回包含obpricevalue
列的表:
JSON:
声明:
SELECT AVG(ObsPriceValue) AS AvgObsPriceValue
FROM OPENJSON(@json, '$.data') WITH (
ObsPriceValue numeric(10, 2) '$.ObsPriceValue'
) j
输出:
----------------
AvgObsPriceValue
----------------
2.773333
所以这是JSON数据以这种方式存储的唯一方法?为了简化SQL查询,是否还有其他可能的方法来存储数据?(即使我觉得它很完美)@Giox是的,我想是的。当你有一个JSON数组时,使用OPENJSON来解析这个数组。那么这是唯一一种以这种方式存储JSON数据的方法吗?为了简化SQL查询,是否还有其他可能的方法来存储数据?(即使我觉得它很完美)@Giox是的,我想是的。当您有一个JSON数组时,使用OPENJSON解析这个数组。