【问题标题】:SQL OPENJSON Array in Objects对象中的 SQL OPENJSON 数组
【发布时间】:2023-02-09 15:33:04
【问题描述】:

我有一个具有以下结构/行的表:

ID OptionName OptionValue
0 Gender Male
1 Gender Female

我想查询数据库并返回以下 JSON:

[{
    "OptionName":"Gender",
    "Values":[
        "Male",
        "Female"
    ]
}]

但是我目前得到的结果是这样的:

[{
    "OptionName":"Gender",
    "Values":[
        {
            "OptionValue":"Male"
        },
        {
            "OptionValue":"Female"
        }
    ]
}]

这是我的查询:

SELECT TOP(1) OptionName,
(
    JSON_QUERY(
        (
            SELECT OptionValue 
            FROM [TestJSON].[dbo].[Options] 
            WHERE OptionName = 'Gender' 
            FOR JSON PATH
        )
    )
) AS [Values]
FROM [TestJSON].[dbo].[Options]
WHERE OptionName = 'Gender'
FOR JSON PATH

我该怎么做才能得到我需要的结果?

【问题讨论】:

  • T-SQL 是一种 SQL 方言,被多种产品使用,包括 Sybase、SQL Server 和 Azure Synapse。您在这里使用的 (R)DBMS 产品是什么? Edit 您要标记该产品的问题,以及(如果相关)产品的版本标记。

标签: sql sql-server tsql sql-server-2022


【解决方案1】:

虽然 SQL Server 2022 引入了JSON_ARRAY() 函数,但很难用它来构建具有可变项目计数的 JSON 数组,因此您可以尝试基于字符串的方法:

SELECT DISTINCT o.OptionName, JSON_QUERY(a.[Values]) AS [Values]
FROM Options o
CROSS APPLY (
   SELECT CONCAT('[', STRING_AGG(CONCAT('"', OptionValue, '"'), ','), ']') 
   FROM Options
   WHERE OptionName = o.OptionName
) a ([Values]) 
--WHERE o.OptionName = 'Gender'
FOR JSON PATH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多