1
我很努力的理解如何使用嵌套的FLWOR表達式和group by。這裏是一個示例XML文檔,以及我想要做什麼和什麼。使用「group by」並嵌套FLWOR
<review>
<critic name="Critic1">
<book>
<name>ABC</name>
<rating>6</rating>
</book>
<book>
<name>Monsters</name>
<rating>2</rating>
</book>
<book>
<name>Spring Poems</name>
<rating>5</rating>
</book>
</critic>
<critic name="Critic2">
<book>
<name>ABC</name>
<rating>2</rating>
</book>
<book>
<name>Cooking101</name>
<rating>7</rating>
</book>
<book>
<name>Aliens?</name>
<rating>10</rating>
</book>
</critic>
</review>
基本上我所要做的是按每一本書名的數據,然後每本書下顯示審視,而比分,他們給了那本書的每個評論家。
是我到目前爲止的查詢是
for $books in doc("reviews.xml")/review/critic/book
let $critics := doc("reviews.xml")/review/critic
let $d := $books/name
group by $d
order by $d
return <book name="{$d}">{
for $hasReview in $critics
where $critics/book/name = $d
group by $n := $d
return <critic name="{$critics/@name}" rating="
{$critics/book[name=$d]/rating}"/>
}</book>
從該查詢輸出看起來像
<book name ="ABC">
<critic name = "Critic1 Critic2" rating="6 2"/>
</book>
<book name ="Monsters">
<critic name = "Critic1 Critic2" rating="2"/>
</book>
<book name ="Spring Poems">
<critic name = "Critic1 Critic2" rating="5"/>
</book>
<book name ="Cooking101">
<critic name = "Critic1 Critic2" rating="7"/>
</book>
<book name ="Aliens">
<critic name = "Critic1 Critic2" rating="10"/>
</book>
我想獲得的輸出類似於這樣:
<book name ="ABC">
<critic name = "Critic1" rating="6"/>
<critic name = "Critic2" rating="2"/>
</book>
<book name ="Monsters">
<critic name = "Critic1" rating="2"/>
</book>
<book name ="Spring Poems">
<critic name = "Critic1" rating="5"/>
</book>
<book name ="Cooking101">
<critic name = "Critic2" rating="7"/>
</book>
<book name ="Aliens">
<critic name = "Critic2" rating="10"/>
</book>