J'ai une question sur le groupement xquery. D'après ce que je comprends, le cas habituel serait d'utiliser distinct-values
sur les docs dans la boucle for, mais j'ai une condition à remplir avant de grouper les valeurs, et je ne suis pas sûr de savoir comment cela peut être fait.Résultats de regroupement Xquery basé sur la condition
Cela fait partie de mon xmldb:
<element tag="0001,0000" name="Pos1>198</element>
<element tag="0001,0001" name="Pos2">123</name>
<element tag="0002,0001" name="Pos3">433</element>
<element tag="000b,0000" name="Pos3">16</element>
<element tag="0005,0000" name="Pos4>532</element>
<element tag="0005,0001" name="Pos5">342</name>
<element tag="0008,0001" name="Pos6">17</element>
La condition à remplir est que les coordonnées x (nombre ou hexdec) doivent être des valeurs impaires (par exemple à partir du XML ci-dessus, je seulement besoin résultats de tag = "0001, ...", tag = "000b, ...", tag = "0005, ..."), puis comptez combien d'éléments dans chaque groupe.
Voici comment les résultats devraient ressembler à:
<group>
<element xcoord="0001">2</element>
<element xcoord="000b">1</element>
<element xcoord="0005">2</element>
</group>
Mon code XQuery donc ressemble beaucoup comme ça, où je pourrais générer des résultats qui ont les coordonnées x impaires, mais je ne sais pas comment procéder sur d'ici pour le groupement.
import module namespace functx="http://www.functx.com" at "http://www.xqueryfunctions.com/xq/functx-1.0-nodoc-2007-01.xq";
for $x in collection('/db/mapdb/')//element
let $coord := number(functx:substring-before-last($x/@tag, ","))
where $coord mod 2 != 0
return $x
Veuillez me conseiller. Merci beaucoup.
Bonne question, +1. Voir ma réponse pour une solution complète et correcte. –