Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将嵌套表展平到新行中?_Sql_Oracle_Nested Table - Fatal编程技术网

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

Sql 如何将嵌套表展平到新行中?,sql,oracle,nested-table,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) 我尝试了listag,但无法

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

mytable 
title | col
a     | {1, 2}
b     | {3}
c     | NULL
我需要做的是将嵌套表展平为逗号分隔的字符串

Result:
{
    a: "1, 2"
    b: "3"
    c: NULL
}  
出于我的特殊目的,我不能让结果以表格的形式出现(上面的内容非常简单,但可以解决我的问题)。我认为我得到的最接近的语句是下面的语句(它刚刚返回1,2,3,null)


我尝试了
listag
,但无法使其适用于我的案例。我目前正在尝试阅读更多关于嵌套表的内容,但进展很慢,而且我还没有找到有关此特定问题(嵌套表)的任何内容。

这是否满足您的需要?你说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

这正是我需要的,谢谢。我说我不能让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