如何将嵌套表展平到新行?

时间:2018-08-01 20:46:39

标签: 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,但无法使其适用于我的情况。我目前正在尝试向嵌套表中读取更多内容,但是进展缓慢,而且针对此特定问题(嵌套表)我也找不到任何东西。

1 个答案:

答案 0 :(得分:3)

这是您需要的吗?您是什么意思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

相关问题