如何从SQL Server的CarDetails表JSON字段提取所有车型价格?
提取JSON中所有唯一价格的SQL解决方案
针对你的CarDetails表结构和嵌套JSON数据,可以通过多层OPENJSON结合CROSS APPLY动态解析所有品牌、车型下的价格,最终去重得到结果。以下是完整的SQL语句:
SELECT DISTINCT j3.Price FROM CarDetails CROSS APPLY OPENJSON(JSONData, '$.fuel') AS j1 -- 解析fuel层,获取所有品牌的JSON对象 CROSS APPLY OPENJSON(j1.value, '$.Model') AS j2 -- 解析每个品牌下的Model层,获取所有车型的数组 CROSS APPLY OPENJSON(j2.value) WITH ( Price VARCHAR(20) '$.Price' -- 解析每个车型数组中的Price字段 ) AS j3 ORDER BY j3.Price; -- 可选:按价格排序
代码说明:
- 第一层
OPENJSON(JSONData, '$.fuel'):遍历JSON中fuel节点下的所有品牌(比如示例中的Maruti),返回每个品牌的键(品牌名)和对应的值(品牌的JSON内容)。 - 第二层
OPENJSON(j1.value, '$.Model'):基于每个品牌的JSON内容,遍历Model节点下的所有车型(比如LXI、VXI),返回每个车型的键(车型名)和对应的值(价格数组)。 - 第三层
OPENJSON(j2.value) WITH (...):解析每个车型的价格数组,提取数组中每个元素的Price字段。 DISTINCT关键字:确保最终结果只保留唯一的价格值。
可选优化:
如果需要将价格转换为数值类型(方便后续计算),可以修改SELECT部分:
SELECT DISTINCT CAST(j3.Price AS BIGINT) AS Price FROM CarDetails -- 后续CROSS APPLY部分同上 ORDER BY Price;
内容的提问来源于stack exchange,提问作者Ambuj Dwivedi
相关产品推荐
相关产品推荐

