如何将嵌套表扁平化为新行?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (19)

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

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,但进展缓慢,并且无法找到任何解决这个特定问题的方法(嵌套表)。

提问于
用户回答回答于

这个能满足你的需要吗?

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

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问5 回答
  • 无聊至极

    4 粉丝504 提问5 回答
  • 嗨喽你好

    7 粉丝480 提问4 回答
  • 富有想象力的人

    4 粉丝0 提问3 回答

扫码关注云+社区

领取腾讯云代金券