我有以下JSON并希望有一个表格。
{
"Response": [
{
"questionId": 1,
"answer": [
"5","6"
]
},
{
"questionId": 2,
"answer": [
"5"
]
}
]
}
预期的表......
我尝试了以下内容,但没有找到我正在寻找的确切输出。
SELECT QuestionId,Answer FROM OPENJSON(@responseJson, N'$.Response') r
CROSS APPLY OPENJSON (r.value) WITH ( QuestionId varchar(200) '$.questionId', Answer nvarchar(max) '$.answer')
答案 0 :(得分:2)
将JSON转换为关系数据就像剥洋葱一样。使用OPENJSON
和CROSS APPLY
,直到您拥有所需的所有图层。使用WITH
来简化沿途映射值的任务。
SELECT questions.questionId, answers.answerId AS answer
FROM OPENJSON(@responseJson, '$.Response')
WITH (
questionId INT,
answer NVARCHAR(MAX) AS JSON
) AS questions
CROSS APPLY OPENJSON(answer)
WITH (
answerId INT '$'
) AS answers;
编写此查询的方法较短,但我认为他们并不那么明确。 (如果执行计划有任何指示,使用WITH
明确说明JSON的结构有助于估计内存需求。)