使用parseJson函数及其匹配数据绑定json单元格值

时间:2019-02-19 23:23:29

标签: sql sql-server

我有一个表,其中一列中包含json样式值,并且我能够使用parseJson函数解析它以返回表。但是我对如何将结果与其他表绑定感到困惑。

table1
OrderDate   OrderNo   Weight   Cost   JsonProperty
11/01/2018  1234      8        10     {"JsonData":{"OrderNo":"1234","Shipper":"Andrew"}}
11/05/2018  2345      11       19     {"JsonData":{"OrderNo":"2345","Shipper":"Bell"}}

parseJson((select top 1  JsonProperty FROM table1 where OrderNo = '1234'))
element_id  sequenceNo  parent_ID   Object_ID   NAME        StringValue     ValueType
1           0           1           NULL        OrderNo     1234            string
2           0           1           NULL        Shipper     Andrew          null

Expected result table
OrderDate   OrderNo   Weight   Cost   Shipper
11/01/2018  1234      8        10     Andrew
11/05/2018  2345      11       19     Bell

我现在的想法是我应该遍历所有JsonProperty并首先使用数据透视表创建一个新的临时表吗?如果是这样,我该如何实现?我知道如何进行数据透视,但是假设存在两个以上的项目,那么如何使用table1中的所有OrderNo创建一个表。

2 个答案:

答案 0 :(得分:0)

回答您的问题:

SELECT t.OrderDate,t.OrderNo,t.Weight,t.Cost,a.Shipper
FROM table1 t
LEFT JOIN (
    SELECT p.OrderNo,p.Shipper
    FROM (SELECT NAME,StringValue FROM ParsedDataTable) d
    PIVOT(MAX(d.StringValue) FOR d.NAME IN ([OrderNo],[Shipper])) p
) a ON a.OrderNo = t.OrderNo
;

更好,更简单的解决方案:

SELECT t.OrderDate,t.OrderNo,t.Weight,t.Cost
   ,JSON_VALUE(t.JsonProperty,'$.JsonData.Shipper') AS [Shipper]
FROM table1 t

答案 1 :(得分:0)

脚本仍然存在问题,因为后来我意识到解析器函数内部需要WHERE,因此我最终使用了游标来解决了问题。