sql - 如何将嵌套表展平为新行?

标签 sql oracle nested-table

我有一个表,其中一列包含单行的嵌套表。

mytable 
title | col
a     | {1, 2}
b     | {3}
c     | NULL

我需要做的是将嵌套表展平为逗号分隔的字符串。

Result:
{
    a: "1, 2"
    b: "3"
    c: NULL
}  

出于我的特定目的,我不能只让结果采用表格形式(上面非常简化,但它可以解决我的问题)。我认为我得到的最接近的是以下语句(仅返回 1, 2, 3, null)。

select t.* 
from mytable, table(mytable.col)(+) t;

我尝试过 listagg,但无法让它适用于我的情况。我目前正在尝试对嵌套表进行更多了解,但进展缓慢,并且我无法找到有关此特定问题(嵌套表)的任何内容。

最佳答案

这能满足您的需要吗?你的意思是 listagg 没有达到你的目的?

CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
/
CREATE TABLE nested_table (id NUMBER, col1 my_tab_t)
       NESTED TABLE col1 STORE AS col1_tab;

INSERT INTO nested_table VALUES (1, my_tab_t('A'));
INSERT INTO nested_table VALUES (2, my_tab_t('B', 'C'));
INSERT INTO nested_table VALUES (3, my_tab_t('D', 'E', 'F'));

 SELECT TMP.id,
        listagg(Column_Value,',') 
          WITHIN GROUP(ORDER BY Column_Value)
   FROM (SELECT id, 
                COLUMN_VALUE 
           FROM nested_table t1, 
                TABLE(t1.col1) t2
        ) TMP
  GROUP
     BY id

http://sqlfiddle.com/#!4/90cfb6

关于sql - 如何将嵌套表展平为新行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642015/

相关文章:

tabulator - 在制表符中显示/隐藏或切换嵌套表子项

php - SQL : INSERT if no exist and UPDATE if exist

sql - 在 Informix 中从数字转换为带有前导零的字符

sql - 在 .sql 脚本中定义和使用变量

sql - 错误 49 错误的绑定(bind)变量 oracle 表单

javascript - 在 Angularjs 中,如何将一个表放入另一个行数和列数可变的表中?

css - 将 <td> 列高度分配给最小值

sql - SQL 查询中的数字整数舍入

c# - newid() 作为列默认值

sql - Oracle 按分钟分组