試圖弄清楚如何將多行數據轉換為一行KeyValue數組。
Raw data:
Desired result:
{ "Name1":"Value1", "Name2":"Value2" }
我使用Json Path和JSON_Array.嘗試了不同的組合。兩者都沒有解決我的需求。
SELECT JSON_ARRAY(s.name,s.value) AS result
FROM tbl s
WHERE FkId = 1024180
結果是兩行帶有包裝:
row 0 ["Name1","Value1"],
row 1 ["Name2","Value2"]
Tried:
SELECT s.name, s.value
FROM tbl s
WHERE fkid= 1024180
FOR JSON PATH
Result:
[{"name":"SpaceSubType","value":"Fee Earner"},{"name":"Department","value":"Property"}]
有沒有合理的方法來獲得我想要的輸出?
results
應用Yitzhak的建議,我非常接近我所需要的,然而json路徑現在正在逃離手動生成的字典。如果可能的話,有什么想法可以去掉那些轉義字符嗎?
formatted
select
sa.Id as 'id',
s.id as 'Sid',
(SELECT ('{' + STRING_AGG('"' + sp.name + '": "' + sp.value + '"', ',') + '}') as barf FROM tbl sp where foo = s.id) as properties
from TblA sa
inner join TblB s on s.id = sa.Sid
Where sa.Sid = '04000772'
For Json path,
INCLUDE_NULL_VALUES
result
[
{
"id": "04000772",
"Sid": 1024180,
"Properties": "{\"Name1\": \"Value1\",\"Name2\": \"Value2\"}"
}
]
根據以下評論。。這是一張生成字符串后進行轉義的門票。
…s.id as Sid, json_query((select '{'+string_agg('"'+string_escape(name, 'json') +'":'+isnull('"'+string_escape(value, 'json')+'"', 'null'), ',')+'}' from tableX)) as properties
請嘗試以下解決方案。
它將從SQL Server 2017開始工作。
SQL
Output