2

以下の 3 つの XML ファイルがあり、この 3 つのドキュメントをすべて結合して、集計関数を実行し、特定の分類名に対して行われた販売数を調べたいと考えています。しかし、私が書いたコードには問題があるようです。3 つのドキュメントに対して集計機能を実行する方法を教えてください。

ClassDescription.XML
<classification name="Electronic">
   <Description>electronic devices that requires electric</Description>
</classification>
<classification name="SoftToy">
   <Description>Fluffy toys that kids like</Description>
</classification>


ToyClassification.XML
<toy toyID="11">
  <name>Doll</name>
  <classification>SoftToy</classification>
</toy>
<toy toyID="22">
  <name>Xbox</name>
  <classification>Electronic</classification>
</toy>
<toy toyID="33">
  <name>PS3</name>
  <classification>Electronic</classification>
</toy>


 ToySale.XML
 <toySale companyID="1" toyID="11" >
   <amount>15</amount>
 </toySale>
 <toySale companyID="3" toyID="11" >
   <amount>12</amount>
 </toySale>
 <toySale companyID="1" toyID="22" >
   <amount>3</amount>
 </toySale>
 <toySale companyID="2" toyID="33" >
   <amount>7</amount>
 </toySale>



<ClassList>
  <classification name="SoftToy">
    <totalSale>4</totalSale>
  </classification>
  <classification name="Electronic">
    <totalSale>3</totalSale>
  </classification>
</ClassList>

以下は私が持っているコードですが、機能していないようです.これが機能するための正しいxqueryは何ですか?

for $class in (ClassDescription.XML)//classification/@name
for $toyClass in (ToyClassification.XML)//toy/@toyID
for $sale in (ToySale.XML)//toySale/@toyID
let $sum := (ToySale.XML)//toySale[@toyID = $toyClass]
where $sale=$toyClass and $class=$toyClass/../name
order by sum($sum/amount)
return <ClassList>{$class}</ClassList>
4

1 に答える 1

0

このクエリ:

for $total-sale in
    let $vClasses := doc('file:///c:/temp/delete/classDescription.xml'),
        $vDetails := doc('file:///c:/temp/delete/toyClassification.xml'),
        $vSales   := doc('file:///c:/temp/delete/toySale.xml')
     return
       for $c in $vClasses/*/*
        return
           let $d := $vDetails/*/*[classification eq $c/@name],
               $s := $vSales/*/*[@toyID = $d/@toyID]
             return
                <classification name="{$c/@name}">
                         <totalSale>{sum($s/amount)}</totalSale>
                </classification>
  order by $total-sale/totalSale descending
  return $total-sale

3つのXMLドキュメントがそれぞれのファイルにある場合

c:/temp/delete/classDescription.xml:

<t>
    <classification name="Electronic">
        <Description>electronic devices that requires electric</Description>
    </classification>
    <classification name="SoftToy">
        <Description>Fluffy toys that kids like</Description>
    </classification>
</t>

c:/temp/delete/toyClassification.xml:

<t>
    <toy toyID="11">
        <name>Doll</name>
        <classification>SoftToy</classification>
    </toy>
    <toy toyID="22">
        <name>Xbox</name>
        <classification>Electronic</classification>
    </toy>
    <toy toyID="33">
        <name>PS3</name>
        <classification>Electronic</classification>
    </toy>
</t>

c:/temp/delete/toySale.xml:

<t>
    <toySale companyID="1" toyID="11" >
        <amount>15</amount>
    </toySale>
    <toySale companyID="3" toyID="11" >
        <amount>12</amount>
    </toySale>
    <toySale companyID="1" toyID="22" >
        <amount>3</amount>
    </toySale>
    <toySale companyID="2" toyID="33" >
        <amount>7</amount>
    </toySale>
</t>

必要な正しい結果を生成します。

<classification name="SoftToy">
   <totalSale>27</totalSale>
</classification>
<classification name="Electronic">
   <totalSale>10</totalSale>
</classification>

CompanyIDデータは、他の2つのテーブルではまったく使用されていないことに注意してください。

于 2012-10-07T15:37:58.380 に答える