我有一个表,其中一列中包含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创建一个表。
答案 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,因此我最终使用了游标来解决了问题。