我在Xquery中运动时遇到问题。逻辑:
这是xml文件的结构:
WHERE AddStreet != '';
我现在已经这样做了:
<shop>
<products>
<product code="P02">
<name>Hard disk SSD</name>
<price>320</price>
</product>
<product code="P05">
<name>Keyboard</name>
<price>30</price>
</product>
<product code="P06">
<name>NAS</name>
<price>400</price>
</product>
</products>
<purchases>
<quantity product="P02" client="U300111">5</quantity>
<quantity product="P05" client="U300111">3</quantity>
<quantity product="P05" client="U120711">1</quantity>
<quantity product="P02" client="U120711">7</quantity>
<quantity product="P06" client="U030512">1</quantity>
<quantity product="P06" client="U120712">3</quantity>
<quantity product="P02" client="U120712">1</quantity>
</purchases>
</shop>
这就是结果:
for $x in doc("LMSGI06")/shop/purchases/quantity, $y in doc ("LMSGI06")/shop/products/product
let $z := sum($x)
where $x/@product = $y/@code and $z > 5
return
<product>
{$y/name}
{$y/price}
<sales>{$z}</sales>
</producto>
我正在尝试添加产品数量,但是我没有实现添加具有相同产品代码的产品,然后,在where子句中,通过已购买的产品来过滤器5次。有人确实知道我该怎么办?非常感谢你。
结果应为:
<product>
<name>Hard disk SSD</name>
<price>320</price>
<sales>7</sales>
</product>
答案 0 :(得分:2)
如果你的XQuery版本支持它,请使用group by
:
for $product in /shop/products/product
let $code := $product/@code
group by $code
let $sum := sum(/shop/purchases/quantity[@product=$code])
where $sum > 5
return
<product>
{$product/name}
{$product/price}
<sales>{$sum}</sales>
</product>
或者使用distinct-values()
来模拟相同的逻辑:
for $code in distinct-values(/shop/products/product/@code)
let $product := /shop/products/product[@code=$code]
let $qty := /shop/purchases/quantity[@product=$code]
let $sum := sum($qty)
where $sum > 5
return
<product>
{$product/name}
{$product/price}
<sales>{$sum}</sales>
</product>
<强> demo
强>
答案 1 :(得分:2)
@ har07的解决方案可以简化:
for $product in /shop/products/product
let $sum := sum(/shop/purchases/quantity[@product=$product/code])
where $sum > 5
return
<product>
{$product/name}
{$product/price}
<sales>{$sum}</sales>
</product>