use*_*660 3 sql t-sql sql-server arrays json
我的表存储的数据格式如下 -
现在,我想编写一个 SQL 查询来以下面的格式表示这些数据 -
注意:Product 列中存储的数据是 JSON 数组。
Zho*_*rov 18
您需要两个额外的APPLY操作员来进行两个不同的OPENJSON()呼叫。第一次调用使用默认模式,结果是一个包含列key、value和 的表type。第二次调用使用具有适当列的显式模式,使用以下WITH子句定义:
桌子:
桌子:
CREATE TABLE Data (
CustomerID int,
City nvarchar(50),
Product nvarchar(max)
)
INSERT INTO Data
(CustomerID, City, Product)
VALUES
(1, N'Delhi', N'[{"Products": [{"Id": "1", "Name": "TV"}, {"Id": "2", "Name": "Laptop"}]}]'),
(2, N'Bamgalore', N'[{"Products": [{"Id": "1", "Name": "TV"}, {"Id": "2", "Name": "Laptop"}, {"Id": "3", "Name": "Mobile"}]}]')
Run Code Online (Sandbox Code Playgroud)
陈述:
SELECT d.CustomerID, j2.Id, j2.Name
FROM Data d
CROSS APPLY OPENJSON(d.Product, '$') j1
CROSS APPLY OPENJSON(j1.[value], '$.Products') WITH (
Id nvarchar(10) '$.Id',
Name nvarchar(50) '$.Name'
) j2
Run Code Online (Sandbox Code Playgroud)
结果:
----------------------
CustomerID Id Name
----------------------
1 1 TV
1 2 Laptop
2 1 TV
2 2 Laptop
2 3 Mobile
Run Code Online (Sandbox Code Playgroud)