简体   繁体   中英

Transform json into table rows using sql

My initial table looks like this (values of object are dynamic so it's not always the same structure):

id  tags 
1   {"tag1": "value1"} 
2   {"tagA": "valueA", "tagB": "valueB"}

And I want to transform it into this:

id tag   value 
1  tag1  value1 
2  tagA  valueA 
2  tagB  valueB

Could anyone help me with the transformation? I tried using OPENJSON like this but it only works if I filter by id (plus I'm not getting the id column in the result):

DECLARE @json NVARCHAR(MAX)
SET  @json  =  (SELECT tags from auxTagsResources where instanceId = 1)
SELECT \[key\] as tagName, value as tagValue FROM OPENJSON(@json);

Result:

tagName tagValue
tag1    value1

You can apply to the json.

 create table auxTagsResources ( id int identity primary key, instanceId int not null, tags nvarchar(max) ); insert into auxTagsResources (instanceId, tags) values (1, N'{"tag1": "value1"}'), (1, N'{"tagA": "valueA", "tagB": "valueB"}');
 SELECT tag.id, j.[key] as tag, j.[value] FROM auxTagsResources tag CROSS APPLY OPENJSON(tag.tags) j WHERE tag.instanceId = 1
id tag value
1 tag1 value1
2 tagA valueA
2 tagB valueB

Demo on db<>fiddle here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM