我很难写出我的查询来输出一些XML。
我得到了一张包含几个条目的表格:
表dokumentationsschritte(简化)
dokuschritt_id,vorgang_id,version_pool,version_lokal,典型值,vorgang_nummer
我的查询:
SELECT XMLFOREST(tb1."xml-val" AS "dokumentationsschritte")
FROM
(SELECT XMLAGG(XMLELEMENT(NAME dokumentationsschritt ,XMLATTRIBUTES(t.dokuschritt_id AS dokuschritt_id,t.vorgang_id AS vorgang_id,t.version_pool AS version_pool,t.version_lokal AS version_lokal,t.deprecated AS deprecated),
XMLELEMENT(NAME typ,t.typ),XMLELEMENT(NAME dokuschritt_nummer,t.dokuschritt_nummer))) AS "xml-val"
FROM dokumentationsschritte t WHERE t.vorgang_id='4930c02e-1457-316c-c11f-9b7d7f1acb85') AS tb1;
这是有效的,因为我将所有条目都作为XML:
<dokumentationsschritte>
<dokumentationsschritt dokuschritt_id="88942eb7-fbeb-3740-a1b5-a188b0029791" vorgang_id="4930c02e-1457-316c-c11f-9b7d7f1acb85" version_pool="0" version_lokal="3" deprecated="0">
<typ>1</typ>
<dokuschritt_nummer>1204</dokuschritt_nummer>
</dokumentationsschritt>
<dokumentationsschritt dokuschritt_id="94bdeccf-2c89-3163-bd10-6f4353c8b575" vorgang_id="4930c02e-1457-316c-c11f-9b7d7f1acb85" version_pool="0" version_lokal="3" deprecated="0">
<typ>1</typ>
<dokuschritt_nummer>755</dokuschritt_nummer>
</dokumentationsschritt>
</dokumentationsschritte>
但我想订购dokuschritt_nummer
一旦我添加了ORDER BY,就会出错,要求提供GROUP BY,但是如果我添加它,那么XML就会被搞砸......不再有根节点,而是每个条目都有一个dokumentationsschritte节点。
[编辑]
SELECT XMLFOREST(tb1."xml-val" AS "dokumentationsschritte")
FROM
(SELECT XMLAGG(XMLELEMENT(NAME dokumentationsschritt ,XMLATTRIBUTES(t.dokuschritt_id AS dokuschritt_id,t.vorgang_id AS vorgang_id,t.version_pool AS version_pool,t.version_lokal AS version_lokal,t.deprecated AS deprecated),
XMLELEMENT(NAME typ,t.typ),XMLELEMENT(NAME dokuschritt_nummer,t.dokuschritt_nummer GROUP BY dokuschritt_nummer ORDER BY dokuschritt_nummer))) AS "xml-val"
FROM dokumentationsschritte t WHERE t.vorgang_id='4930c02e-1457-316c-c11f-9b7d7f1acb85') AS tb1;
[/编辑]
<dokumentationsschritte><dokumentationsschritt dokuschritt_id="4b57c57a-0330-3dc7-8eed-f1b0192c6372" vorgang_id="4930c02e-1457-316c-c11f-9b7d7f1acb85" version_pool="0" version_lokal="2" deprecated="0"><typ>2</typ><dokuschritt_nummer>1</dokuschritt_nummer></dokumentationsschritt></dokumentationsschritte>
<dokumentationsschritte><dokumentationsschritt dokuschritt_id="966136b2-5fc3-306c-88db-064e4d17f710" vorgang_id="4930c02e-1457-316c-c11f-9b7d7f1acb85" version_pool="0" version_lokal="1" deprecated="0"><typ>1</typ><dokuschritt_nummer>2</dokuschritt_nummer></dokumentationsschritt></dokumentationsschritte>
我很丢失。你能帮忙吗?
非常感谢!
马尔特
答案 0 :(得分:0)
这应该有效,如果你想要对聚合函数中的数据进行排序,你必须将ORDER BY
置于agg([ref])内。
SELECT XMLFOREST(tb1."xml-val" AS "dokumentationsschritte")
FROM
(SELECT XMLAGG(
XMLELEMENT(NAME dokumentationsschritt
,XMLATTRIBUTES(t.dokuschritt_id AS dokuschritt_id,t.vorgang_id AS vorgang_id,t.version_pool AS version_pool,t.version_lokal AS version_lokal,t.deprecated AS deprecated)
,XMLELEMENT(NAME typ,t.typ)
,XMLELEMENT(NAME dokuschritt_nummer,t.dokuschritt_nummer)
)
ORDER BY dokuschritt_nummer
) AS "xml-val"
FROM
dokumentationsschritte t
WHERE t.vorgang_id='4930c02e-1457-316c-c11f-9b7d7f1acb85') AS tb1;