[英]Create Nested XML Document from Multiple Tables with Multiple Rows - SQL Query
我正在嘗試在 RPG 程序中通過 SQL 創建一個 XML 文檔,但我似乎找不到使 XML 看起來像這樣的方法。
<ReplenishmentTask>
<TaskID>MTEST20 </TaskID>
<ContainerID> </ContainerID>
<ReplenishmentLine>
<PART> 2P8267 </PART>
<QTY>2</QTY>
</ReplenishmentLine>
<ReplenishmentLine>
<PART> 2P8267 </PART>
<QTY>2</QTY>
</ReplenishmentLine>
</ReplenishmentTask>
<ReplenishmentTask>
<TaskID>MTEST20 </TaskID>
<ContainerID> </ContainerID>
<ReplenishmentLine>
<PART> 2P8267 </PART>
<QTY>2</QTY>
</ReplenishmentLine>
<ReplenishmentLine>
<PART> 2P8267 </PART>
<QTY>2</QTY>
</ReplenishmentLine>
</ReplenishmentTask>
這是我的代碼的樣子:
SELECT XMLDOCUMENT(
XMLELEMENT(NAME "Download",
XMLAGG(
XMLELEMENT(NAME "ReplenishmentTask",
XMLFOREST(a.FIELD1 as "TaskID",
a.FIELD2 as "ContainerID",
( SELECT
XMLDOCUMENT(XMLAGG(
XMLFOREST( b.PART as "PART",
b.ORQY as "QTY" )
)) // end AGG and DOCUMENT
FROM TABLE2 b
WHERE b.FIELD1 = A.FIELD1
) AS "ReplenishmentLine" // end SELECT
) // end FOREST - Inv
) // end ELEMENT - ReplenishmentTask
) // end AGG
) // end ELEMENT - Download
) // end DOCUMENT
FROM TABLE1 a
;
這就是結果 - 我需要刪除額外的 XML 標簽 ReplenishmentLine 但不能,因為如果我使用 XMLForest,子選擇也需要有一個 XML 標簽。 還有別的辦法嗎?
<ReplenishmentTask>
<TaskID>MTEST20 </TaskID>
<ContainerID> </ContainerID>
<ReplenishmentLine>
<TESTT>
<PART> 2P8267 </PART>
<QTY>2</QTY>
</TESTT>
</ReplenishmentLine>
</ReplenishmentTask>
<ReplenishmentTask>
<TaskID>MTEST40 </TaskID>
<ContainerID> </ContainerID>
<ReplenishmentLine>
<TESTT>
<PART> 2P8267 </PART>
<QTY>3</QTY>
</TESTT>
<TESTT>
<PART> 4C3384 </PART>
<QTY>3</QTY>
</TESTT>
</ReplenishmentLine>
</ReplenishmentTask>
在 SQL SERVER 中,它或多或少是這樣的:
SELECT a.FIELD1 as "TaskID",
a.FIELD2 as "ContainerID",
( SELECT b.PART as "PART",
b.ORQY as "QTY"
FROM TABLE2 b
WHERE b.FIELD1 = A.FIELD1
FOR XML PATH('ReplenishmentLine'))
FROM TABLE1 a
FOR XML PATH('ReplenishmentTask')
這真的取決於你需要什么。
在嘗試了其他方法后,我改為這樣做了。 我剛剛關閉了 XML 森林,並在第二個 select 之前加了一個逗號。
SELECT XMLDOCUMENT(
XMLELEMENT(NAME "Download",
XMLAGG(
XMLELEMENT(NAME "ReplenishmentTask",
XMLFOREST(a.FIELD1 as "TaskID",
a.FIELD2 as "ContainerID"), > added closing parenthesis so the next select will not be considered
( SELECT
XMLDOCUMENT(XMLAGG(
XMLFOREST( b.PART as "PART",
b.ORQY as "QTY" )
)) // end AGG and DOCUMENT
FROM TABLE2 b
WHERE b.FIELD1 = A.FIELD1
) //removed this > AS "ReplenishmentLine" // end SELECT
) // end FOREST - Inv
) // end ELEMENT - ReplenishmentTask
) // end AGG
) // end ELEMENT - Download
) // end DOCUMENT
FROM TABLE1 a
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.