我在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中使用已弃用的代码
非常感谢
答案 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
元素之外。
简单(正如我所想)。
谢谢!