如何在项目的以下节点中找到非重复和非反转的值对?

到目前为止,通过对xml文件的查询,我得到以下结果。

<results>
  <project>
    <pnumber>1</pnumber>
    <workers>
      <essn>123456789</essn>
      <essn>453453453</essn>

    </workers>
  </project>
  <project>
    <pnumber>2</pnumber>
    <workers>
      <essn>123456789</essn>
      <essn>333445555</essn>
      <essn>453453453</essn>
    </workers>
  </project>
  ...

依次类推6个项目(pnumber)。我需要为每个项目的值找到essn的值对,并为工人列出它们。结果中不能包含重复对或反向对。

IV在确定了哪些对是不同的之后,尝试修改下面的distinct-value以显示对。

let $items := (1,2,4,5,5)
let $unique-items := distinct-values($items)
return
   <result>   

      <items>
      {
         for $item in $unique-items
         return <item>{$item}</item>
      }
      </items>


   </result>

我只是在集合中获得唯一值。

我用它来到达现在的位置,

<results>
  {
    for $project in doc("../company/project.xml")//project
    where $project/pnumber=*
    return
     <project>
      {$project/pnumber}
       {  
              let $works_on := doc("../company/works_on.xml")//works_on[pno = $project/pnumber]
              return
             <workers>
              {$works_on/essn}
                  </workers>
      } 
     </project>   
  }
</results>

结果应该像这样

<results>
  <project>
    <pnumber>1</pnumber>
    <workers>
      <pair1>
      <essn>123456789</essn>
      <essn>453453453</essn>
      </pair1>
    </workers>
  </project>
  <project>
    <pnumber>2</pnumber>
    <workers>

      <pair1>
      <essn>123456789</essn>
      <essn>333445555</essn>
       </pair1>

      <pair2>
      <essn>453453453</essn>
      <essn>333445555</essn>
       </pair2>

       <pair3>

       <essn>123456789</essn>
       <essn>453453453</essn>

        </pair3>

    </workers>
  </project>
  ...
zhang6396608 回答:如何在项目的以下节点中找到非重复和非反转的值对?

对于给定的样本数据,我认为查询

<results>
{
    for $project in results/project
    return
        <project>
        {
            $project/pnumber,<workers>
            {
                for $worker at $pos in $project/workers/essn
                for $other-worker in $project/workers/essn[position() gt $pos]
                count $p
                return
                    <pair index="{$p}">
                    {
                        $worker,$other-worker
                    }
                    </pair>
            }
            </workers>
        }
        </project>
}
</results>

https://xqueryfiddle.liberty-development.net/nbUY4kD创建正确的对。

我不确定不重复数据的要求不是您只是想要的步骤还是可以通过替换来确保

let $works_on := doc("../company/works_on.xml")//works_on[pno = $project/pnumber]
          return
         <workers>
          {$works_on/essn}
              </workers>

使用

 let $works_on := distinct-values(doc("../company/works_on.xml")//works_on[pno = $project/pnumber]/essn)
          return
         <workers>
            <essn>{.}</essn>
          </workers>
本文链接:https://www.f2er.com/3161733.html

大家都在问