Home > Mobile >  Transform json into table rows using sql
Transform json into table rows using sql

Time:12-16

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

CodePudding user response:

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

  • Related