sql - 如何从表中的 oracle sql 中选择带有 group by 子句的嵌套 json 对象?

标签 sql json oracle oracle12c

假设我有以下声明:

WITH t AS
(
  SELECT 'A' AS level_0, 'A1' AS level_1_1, 'object_1' AS level_1_2, 'A11' AS level_2_1, 'B11' AS level_2_2 FROM dual
  UNION ALL
  SELECT 'A' AS level_0, 'A1' AS level_1_1, 'object_1' AS level_1_2, 'A12' AS level_2_1, 'B12' AS level_2_2 FROM dual
  UNION ALL
  SELECT 'A' AS level_0, 'A1' AS level_1_1, 'object_1' AS level_1_2, 'A13' AS level_2_1, 'B13' AS level_2_2 FROM dual
  UNION ALL
  SELECT 'A' AS level_0, 'A1' AS level_1_1, 'object_1' AS level_1_2, 'A14' AS level_2_1, 'B14' AS level_2_2 FROM dual
  UNION ALL
  SELECT 'B' AS level_0, 'A1' AS level_1_1, 'object_2' AS level_1_2, 'A11' AS level_2_1, 'B15' AS level_2_2 FROM dual
  UNION ALL
  SELECT 'B' AS level_0, 'A1' AS level_1_1, 'object_2' AS level_1_2, 'A12' AS level_2_1, 'B16' AS level_2_2 FROM dual
  UNION ALL
  SELECT 'B' AS level_0, 'A1' AS level_1_1, 'object_2' AS level_1_2, 'A13' AS level_2_1, 'B17' AS level_2_2 FROM dual
)
SELECT * FROM t

我想要的输出是这样的:


+---------+---------------------------------------------------------------------------------+
| Level 0 |                                      JSON                                       |
+---------+---------------------------------------------------------------------------------+
| A       | {"level_1_1":"A1","object_1":{"A11":"B11","A12":"B12","A13":"B13","A14":"B14"}} |
| B       | {"level_1_1":"A1","object_2":{"A11":"B15","A12":"B16","A13":"B17"}}             |
+---------+---------------------------------------------------------------------------------+

如何使用 select 语句获得此输出?

非常感谢您的帮助!

最佳答案

JSON_OBJECT()JSON_OBJECTAGG() 函数可以与适当的分组一起使用,例如

SELECT level_0,
       JSON_OBJECT(
                   'level_1_1' VALUE level_1_1,
                    level_1_2  VALUE JSON_OBJECTAGG(level_2_1 VALUE level_2_2)
        )
    AS "Result JSON"                           
  FROM t
 GROUP BY level_1_2, level_1_1, level_0

Demo

关于sql - 如何从表中的 oracle sql 中选择带有 group by 子句的嵌套 json 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65104182/

相关文章:

mysql - 具有多个 where 子句和日期之间的 Oracle Sql 合并表和 Day week month

oracle - 将 Oracle 表数据与 MongoDB 集合连接

java - Oracle BPM 套件 REST 服务

sql - 通过变量插入多行

c# - 如何使用 Entity Framework .NET Core 编写带有 where 子句的 SQL 更新查询

mysql - 根据Microsoft SQL Server中其他表中的行的位置排列一个表的列

python - 如何使用 Pandas 标准化 JSON 文件?

ios - NSMutableURLRequest,JSON 转换为 NSDictionary

mysql - INSERT INTO 和带有 COUNT 的子查询

json - Azure:自动化帐户的 SKU 属性值,集中模板文档在哪里?