如何使用SQL Server将json存储为字符串的列分解/规范化为行和列?

tvz2xvvm  于 2023-04-08  发布在  SQL Server
关注(0)|答案(1)|浏览(153)

我正在使用SQL Server,并且有一个列,其中存储了json作为字符串。我试图将json分解/规范化为新的行和列。下面是表当前的外观图片。每个PricePointId在Prices json列中至少有一条记录。每个json数组在每行中具有相同的键。每个Prices对象将创建新的行,然后每个键将成为其自己的列。
View of the table.
一个PricePointId的例子,它在Prices json数组中有多个price对象,对于每个Price id,应该将其分成多行。

# PricePointId
40844
# Prices
[{"id":252820,"component_id":106965,"starting_quantity":1,"ending_quantity":1,"unit_price":"20.0","price_point_id":40844,"formatted_unit_price":"$20.00","segment_id":null},{"id":595550,"component_id":106965,"starting_quantity":2,"ending_quantity":5,"unit_price":"10.0","price_point_id":40844,"formatted_unit_price":"$10.00","segment_id":null},{"id":595551,"component_id":106965,"starting_quantity":6,"ending_quantity":null,"unit_price":"5.0","price_point_id":40844,"formatted_unit_price":"$5.00","segment_id":null}]

所需的结果应该看起来像excel中的这个模型。关联的PricePointId的每个对象都被赋予了自己的行,键被转换成了列。
Desired Results
我试过查看OPENJSON和STRING_SPLIT,但似乎都无法正常工作。

hsgswve4

hsgswve41#

只是为了扩展我的评论

Select A.[PricePointId] 
      ,B.*
 From  YourTable A
 Cross Apply ( Select *
                 From OpenJSON(Prices)
                 with ( component_id         int
                       ,starting_quantity    int
                       ,ending_quantity      int
                       ,unit_price           money
                       ,price_point_id       int
                       ,formatted_unit_price varchar(50)
                       ,segment_id           varchar(50)
                      )
             ) B

结果

相关问题