【问题标题】:Oracle SQL: Xmlagg with several Xmlelement / columns in SelectOracle SQL:Xmlagg 与 Select 中的多个 Xmlelement/列
【发布时间】:2017-07-08 16:49:15
【问题描述】:

我将以下内容作为更大的 Select 查询的一部分,该查询到目前为止运行良好,并帮助我为 column1 中的每条记录获取一行。

但是,这会为 column2、column3 和 column4 返回一个单独的 XML 元素,而我需要将它们全部放在一个列中。

谁能告诉我如何将这三列的 XML 元素组合在一起?
在研究这个时,我遇到了XMLFOREST,但这似乎不是一个广泛使用的功能,我不知道如何在这里应用它。

我的查询(相关部分):

SELECT
    a.column1 AS Column1
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column2) ORDER BY b.column2).EXTRACT('//text()'), ',') AS Column2
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column3) ORDER BY b.column3).EXTRACT('//text()'), ',') AS Column3
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column4) ORDER BY b.column4).EXTRACT('//text()'), ',') AS Column4
    , c.column5 AS Column5
    /* ... */
FROM
    /* ... */

当前输出:

所需输出:

非常感谢您的帮助,
迈克

【问题讨论】:

  • 如果你把你得到的输出和你想要的输出包括在内,你会更快地得到更好的答案。
  • @jeff6times7:谢谢。我现在已将此添加到帖子中。基本上,我正在尝试为第 1 列中的每个唯一记录组合第 2、3 和 4 列的数据。与当前输出的不同之处在于,我希望将其组合在一个列中,而不是为它设置三个单独的列。
  • 如果您为所需的输出附加了示例输入 XML,那就太好了。
  • @krokodilko:谢谢。我根本不需要 XML,我只是将其用作解决方法,因为我超出了 Listagg 的字符限制。我只需要为第 1 列中的每个唯一记录组合第 2 到 4 列,如上图所示。对于第 1 列中的每条唯一记录,我只需要一行。
  • 你说这样的东西行不通? SELECT a.column1 AS Column1 , RTRIM(XMLAGG(XMLELEMENT(e, b.column2||b.column3||b.column4) ORDER BY b.column2||b.column3||b.column4).EXTRACT('//text()'), ',') AS Column2 , c.column5 AS Column3 /* ... */ FROM /* ... */ - 请检查这个。如果不起作用,请在此处粘贴 b.column2、b.column3 和 b.column4 列的原始结构。

标签: xml oracle select trim string-concatenation


【解决方案1】:
SELECT
    a.column1 AS Column1
    , RTRIM(XMLAGG(XMLELEMENT(e, b.column2||','||b.column3||','||b.column4) ORDER BY b.column2).EXTRACT('//text()'), ',') AS Column2
    , c.column5 AS Column5
    /* ... */
FROM
    /* ... */

【讨论】:

  • 请用你自己的话解释一下,这将如何解决有问题的问题,从而为你的答案增加价值,而不是只回答代码。
猜你喜欢
  • 2012-12-25
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多