sql server - Convert two columns into key-value json object? -
using for json auto
or for json path
on following record set (which representing product's attributes):
attribute | value ----------------- color | red size | small
will produce:
[{"attribute":"color","value":"red"},{"attribute":"size","value":"small"}]
is there way produce following instead:
{"color":"red","size":"small"}
note every product attribute different others; record set different every product. pivoting not option needs dynamic sql! seems need function able cross
products table produce example product catalog.
instead of json functions of sql server 2016, used string concatenation function string_agg in sql server 2017 seen in following script
/*create table productattributes ( product int, attribute varchar(40), value varchar(40) ) insert productattributes select 1, 'color', 'red' insert productattributes select 1, 'size', 'small' insert productattributes select 2, 'processor', 'intel' insert productattributes select 2, 'ram', '16' insert productattributes select 2, 'weight', '2'*/ select product, '{' + string_agg( '"' + attribute + '":"' + value + '"' ,',') + '}' attributes productattributes group product
output follows 2 product entries product attributes 1 {"color":"red","size":"small"} 2 {"processor":"intel","ram":"16","weight":"2"}
if using previous version sql server 2017, can use string concatenation using sql xml path follows
select product, '{' + stuff( ( select ',' + '"' + attribute + '":"' + value + '"' productattributes a.product = p.product xml path(''),type ).value('.','varchar(max)' ), 1, 1, '' ) + '}' attributes productattributes p group product
developers same result
Comments
Post a Comment