XMLType:按选择查询分组

时间:2016-07-12 08:29:56

标签: xml oracle oracle12c

我在Oracle 12c中有这个基于XML的查询:

freeze

我得到了这个结果:

  SELECT XMLELEMENT (
            "companiesArray",
            XMLAGG (
               XMLELEMENT (
                  "CompanyElement",
                  XMLFOREST (d.poclcdde AS "companyCode"),
                  (SELECT XMLELEMENT (
                             "policiesArray",
                             XMLAGG (
                                XMLELEMENT (
                                   "PolicyElement",
                                   XMLELEMENT ("policyNumber", de.polinpol),
                                   XMLELEMENT ("companyCode", de.policdde),
                                   XMLELEMENT ("productCode", de.politipo))))
                     FROM dtpoli de
                    WHERE de.polinpol = d.poclnpol AND de.policdde = d.poclcdde))))
    FROM dtpocl d
   WHERE d.poclcdcl = 202126

但我想通过companyCode(d.poclcdde)对结果进行分组。就这样:

<companiesArray>
    <CompanyElement>
        <companyCode>100</companyCode>
        <policiesArray>
            <PolicyElement>
                <policyNumber>1000005</policyNumber>
                <companyCode>100</companyCode>
                <productCode>02</productCode>
            </PolicyElement>
        </policiesArray>
    </CompanyElement>
    <CompanyElement>
        <companyCode>100</companyCode>
        <policiesArray>
            <PolicyElement>
                <policyNumber>9902658</policyNumber>
                <companyCode>100</companyCode>
                <productCode>02</productCode>
            </PolicyElement>
        </policiesArray>
    </CompanyElement>
    <CompanyElement>
        <companyCode>200</companyCode>
        <policiesArray>
            <PolicyElement>
                <policyNumber>1000005</policyNumber>
                <companyCode>200</companyCode>
                <productCode>02</productCode>
            </PolicyElement>
        </policiesArray>
    </CompanyElement>
</companiesArray>

我尝试了一些方法但没有成功。如果我放一个<companiesArray> <CompanyElement> <companyCode>100</companyCode> <policiesArray> <PolicyElement> <policyNumber>1000005</policyNumber> <companyCode>100</companyCode> <productCode>02</productCode> </PolicyElement> <PolicyElement> <policyNumber>9902658</policyNumber> <companyCode>100</companyCode> <productCode>02</productCode> </PolicyElement> </policiesArray> </CompanyElement> <CompanyElement> <companyCode>200</companyCode> <policiesArray> <PolicyElement> <policyNumber>1000005</policyNumber> <companyCode>200</companyCode> <productCode>02</productCode> </PolicyElement> </policiesArray> </CompanyElement> </companiesArray> 我会得到两个具有相同XML结构的不同记录,但是由companyCode拆分。 我想我差不多了,但我想念“附近”。 :) 注意:我不想在Oracle 12c中使用已弃用的代码 非常感谢

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

SELECT XMLELEMENT (
          "CompanyArray",
          (  SELECT XMLAGG (
                       XMLELEMENT (
                          "CompanyElement",
                          XMLELEMENT ("companyCode", m.poclcdde),
                          XMLAGG (
                             XMLELEMENT (
                                "PolicyElement",
                                XMLFOREST (s.polinpol AS "policyNumber",
                                           s.politipo AS "productCode")))))
                       xml_payload
               FROM dtpocl m, dtpoli s
              WHERE     m.poclcdde = s.policdde
                    AND m.poclnpol = s.polinpol
                    AND m.poclcdcl = 202126
           GROUP BY m.poclcdde))
  FROM DUAL;

只需加入两个表并保持在CompanyArray元素之外。 简单(正如我所想)。

谢谢!