从表中选择xml按多个级别分组

时间:2016-07-13 09:46:51

标签: xml group-by db2 zos db2-zos

我正在使用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子句,我不知道如何编写更复杂的查询。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

要将多个级别的数据分组到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> 生成一个原始XML元素列表,其中包含内部组以及要在周围元素中使用的列。然后外部funcs = [func1, func2] for i, voltage in enumerate(ranges): for step in voltage: func = funcs[i % 2] func(step) 使用此数据从这些组创建组。所以结果将是这样的:

ranges