0

我正在使用 DB2 for z/OS V10。

我需要从 DB2 表中直接选择一些数据到 XML 中,并将数据分组在 1 级以上,如下例所示

<actionCodeGrp>
   <actionCode>A</actionCode>
   <ISINGrp>
      <ISIN>DE0000000001</ISIN>
      <NAME>ISIN-DE-1</NAME>
      <ISSUER>AAA</ISSUER>
   </ISINGrp>
   <ISINGrp>
      <ISIN>DE0000000002</ISIN>
      <NAME>ISIN-DE-2</NAME>
      <ISSUER>BBB</ISSUER>
   </ISINGrp>
</actionCodeGrp>
<actionCodeGrp>
   <actionCode>B</actionCode>
   <ISINGrp>
      <ISIN>DE0000000003</ISIN>
      <NAME>ISIN-DE-3</NAME>
      <ISSUER>CCC</ISSUER>
   </ISINGrp>
   <ISINGrp>
      <ISIN>DE0000000004</ISIN>
      <NAME>ISIN-DE-4</NAME>
      <ISSUER>DDD</ISSUER>
   </ISINGrp>
</actionCodeGrp>

上面命名的列都是同一个关系表的一部分。我发现的所有例子都只有最大值。一个 group by 子句,我不知道如何编写更复杂的查询。有人可以帮忙吗?

4

1 回答 1

0

似乎不太支持将多个级别的数据分组到 XML 文档中,但我使用嵌套子选择使其工作:

SELECT XMLSERIALIZE(CONTENT                                  
       XMLELEMENT(NAME "FIELD1",                             
                  XMLATTRIBUTES(F1),                      
                  XMLAGG(SUBELEMENT))                        
       AS CLOB)                                              
FROM(                                                        
SELECT F1,                                                
       XMLELEMENT(NAME "FIELD2",                             
                  XMLATTRIBUTES(F2),               
                  XMLAGG(XMLELEMENT(NAME "FIELD3",           
                         XMLATTRIBUTES(F3))))    
        AS SUBELEMENT                                        
FROM DBTM42VW.KFZT525                                        
WHERE F1 IN ('VAL1','VAL2')                                 
  AND F3 IN('SEF','AUS')                         
  GROUP BY F1, F2) MYSUBQUERY                     
GROUP BY F1                                               
;                                                            

所以基本上内部SELECT生成一个原始 XML 元素列表,其中包含内部组以及要在周围元素中使用的列。然后外部SELECT使用这些数据从这些组中创建组。所以结果将是这样的:

<FIELD1 F1="VAL1">
    <FIELD2 F2="FM124">
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
    </FIELD2>
    <FIELD2 F2="FM132">
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
    </FIELD2>
</FIELD1>
<FIELD1 F1="VAL2">
    <FIELD2 F2="FM124">
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
    </FIELD2>
    <FIELD2 F2="FM132">
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="SEF"/>
        <FIELD3 F3="AUS"/>
        <FIELD3 F3="SEF"/>
    </FIELD2>
</FIELD1>               
于 2016-07-14T08:50:20.460 回答