将 MSSQL 中 OPENJSON 返回的数组类型结果转换为表格?

3

我在我的Microsoft (MS) SQL Server查询中有一个JSON对象。这个JSON对象只有一个值,它是一个字符串数组。

--this variable holds my JSON object with a value of array type. 
declare @json nvarchar(max) = N'{
                    "value": [
                        "tapiwanashe",
                        "robert",
                        "emmerson",
                        "ruwimbo",
                        "takudzwa",
                        "munyaradzi"
                    ]
                }'

我的目标是编写一条SQL查询,使用支持的MS SQL Server JSON函数,以生成一个包含一个列和六行值的表格,这些值位于上面的JSON对象值数组中。

我已经尝试运行JSON_QUERY和OPENJSON函数。然而,这两个函数都返回一个字符串数组作为输出。我希望有一个包含一个列和六行的结果。

select JSON_QUERY(@json, '$.value')

select [value] from OPENJSON(@json)

我得到的结果是:
value
---------------
[
   "tapiwanashe",
   "robert",
   "emmerson",
   "ruwimbo",
   "takudzwa",
   "munyaradzi"
]

然而,我期望得到的结果应该是这样的:
value
-----------
tapiwanashe
robert
emmerson
ruwimbo
takudzwa
munyaradzi

结果必须保留值数组中值出现的顺序。

1个回答

5

像这样:

declare @json nvarchar(max) = N'{
                    "value": [
                        "tapiwanashe",
                        "robert",
                        "emmerson",
                        "ruwimbo",
                        "takudzwa",
                        "munyaradzi"
                    ]
                }'

select value 
from openjson(@json,'$.value')
order by [key]

输出

value
----------
tapiwanashe
robert
emmerson
ruwimbo
takudzwa
munyaradzi

谢谢。这回答了我的问题。我会接受这个作为我的问题的答案。 - Hakuna N
1
SELECT [value] from OPENJSON(@json, '$.value') ORDER BY value - Hasan Mahmood
1
@HasanMahmood,感谢您的评论。但是,我想保留数组值出现顺序的顺序。 - Hakuna N
2
如果你想要按照某个关键字排序,那么就必须使用 order by [key]。否则,像所有的 SELECT 语句一样,返回的行的顺序是未定义的并且可能会发生变化。 - David Browne - Microsoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接