代码之家  ›  专栏  ›  技术社区  ›  jackscorrow

XMLTABLE后的聚合函数返回空结果集

  •  0
  • jackscorrow  · 技术社区  · 6 年前

    以这种形式:

    A   B
    1  a:b:e
    2  c:d:f
    

    然后我在表中转换它 此表格:

    A  B
    1  a
    1  b
    1  e
    2  c
    2  d
    2  f
    

    使用此查询:

    SELECT A,
      trim(COLUMN_VALUE) B
    FROM one,
      xmltable(('"'
      || REPLACE(B, ':', '","')
      || '"'))
    

    SELECT A,
      LISTAGG(B, ', ') WITHIN GROUP (ORDER BY B)
    FROM two
    GROUP BY A
    

    要再次返回表单,请执行以下操作:

    A    B
    1  a,b,e
    2  c,d,f
    

    A    B
    

    而不是我期待的那个。 不幸的是,我不能用一个更简单的查询重新创建我的问题,我不能共享原始查询,因为它包含敏感信息。

    我希望这可能是一个已知的问题,或者可能与字段数据类型有关。我试图添加一个 TO_CHAR(B) 内部 LISTAGG()

    3 回复  |  直到 6 年前
        1
  •  1
  •   Fahmi    6 年前

    你可以在下面试试

    DEMO

    SELECT A,
      LISTAGG(B, ', ') WITHIN GROUP (ORDER BY B)
    FROM 
    (SELECT A,
      trim(COLUMN_VALUE) B
    FROM one,
      xmltable(('"'
      || REPLACE(B, ':', '","')
      || '"'))
    ) two GROUP BY A
    

    A   B
    1   a, b, e
    2   c, d, f
    
        2
  •  1
  •   Nikhil    6 年前

    这将有助于:

    select a.*,REPLACE(a.B, ':', ',') from NS a;
    

    http://sqlfiddle.com/#!9/2c1e9d/2/0

        3
  •  0
  •   jackscorrow    6 年前

    我对可能的数据类型问题的预感是正确的。

    功能 xmltable XMLTYPE ,在我的案例专栏中

    我通过转换 获取此查询的列到字符串:

    SELECT A,
      trim((COLUMN_VALUE).getstringval()) B
    FROM one,
      xmltable(('"'
      || REPLACE(B, ':', '","')
      || '"'))
    

    非常感谢每一位试图帮助我的人。