簡體   English   中英

從多行多表創建嵌套 XML 文檔 - SQL 查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM