Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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查询JSONobject以获取聚合值_Sql_Json_Sql Server - Fatal编程技术网

SQL Server查询JSONobject以获取聚合值

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 }]

我在SQL Server中的
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解析这个数组。