【发布时间】: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