У меня есть следующий json в столбце:
{
"fields":[
{
"field":"modelName",
"value":"abc123"
},
{
"field":"displayName",
"value":"ABC 123"
},
{
"field":"order",
"value":5
}
],
"variables":[
{
"varId":4,
"oldValue":100,
"newValue":"150"
},
{
"varId":5,
"oldValue":"abc",
"newValue":"def"
}
]
}
И я хотел бы вытащить эту информацию примерно так:
Id Field Value VarId oldValue newValue
2 modelName abc123 null null null
2 displayName ABC 123 null null null
2 order 5 null null null
2 null null 4 100 150
2 null null 5 abc def
Таким образом, я могу простоитерируйте по набору результатов и просто проверите ноль, чтобы увидеть, какой это тип.
В настоящее время у меня есть следующее утверждение:
select Id, Fields.Field, Fields.Value, Variables.VarId, Variables.OldValue, Variables.NewValue from Product
cross apply openjson( data, '$.fields') with (Field varchar(50) '$.field', Value varchar(50) '$.value') AS Fields
cross apply openjson( data, '$.variables') with (VarId int '$.varId', OldValue varchar(50) '$.oldValue', NewValue varchar(50) '$.newValue') AS Variables
Но это дает мне следующий вывод:
Как видите, все продублировано. Возможно ли получить желаемый результат?
Спасибо