1

myColumnmyTable表中有一个具有此值的列:

"6285":[
         {
           "75963":{"lookupId":"54","value":"0","version":null},
           "75742":{"lookupId":"254","value":"991","version":null}
         }
       ]

我需要使用or函数编写select查询(我的版本不支持)。查询应返回以下结果:JSON_VALUEJSON_QUERYsql serverOPENJSON

"75963-0, 75742-991"

如您所见,我需要value参数值。另请注意,我不知道6285数组内的对象将包含哪些元素。我的意思是我事先不会知道其中会有 2 个元素(75963 和 75742)。可能有更多或更少的元素,当然它们可能不同。然而6285,数组中总是只有一个对象。

我可以写什么样的select来实现它?

4

1 回答 1

2

很奇怪,我认为你的版本支持OPENJSON(),你可以尝试使用以下语句。请注意,问题中的 JSON 无效,它应该在{}.

桌子:

CREATE TABLE Data (JsonColumn varchar(1000))
INSERT INTO Data (JsonColumn) 
VALUES ('{"6285":[{"75963":{"lookupId":"54","value":"0","version":null},"75742":{"lookupId":"254","value":"991","version":null}}]}')

陈述:

SELECT CONCAT(j2.[key], '-', JSON_VALUE(j2.[value], '$.value')) AS JsonValue
FROM Data d
CROSS APPLY OPENJSON(d.JsonColumn) j1
CROSS APPLY OPENJSON(j1.[value], '$[0]') j2

结果:

JsonValue
---------
75963-0
75742-991

如果您需要汇总结果,可以使用STRING_AGG()

SELECT STRING_AGG(CONCAT(j2.[key], '-', JSON_VALUE(j2.[value], '$.value')), ',') AS JsonValue
FROM Data d
CROSS APPLY OPENJSON(d.JsonColumn) j1
CROSS APPLY OPENJSON(j1.[value], '$[0]') j2

结果:

JsonValue
-----------------
75963-0,75742-991
于 2020-07-07T13:05:00.333 回答