Hi everyone,
I'm trying to execute a XQuery sum function in a multiplication of two XML
elements, but it has been difficult to avoid the iteration in a sequence
of elements. For example, considering this case:
sample data:
<Orders>
<Order>
<OrderKey>1</OrderKey>
<LineItem>
<LineNumber>1</LineNumber>
<ExtendedPrice>70848.0000</ExtendedPrice>
<Discount>0.0913</Discount>
<ReturnFlag>A</ReturnFlag>
<LineStatus>F</LineStatus>
<ShipDate>1994-09-03</ShipDate>
</LineItem>
<LineItem>
<LineNumber>2</LineNumber>
<ExtendedPrice>64372.0000</ExtendedPrice>
<Discount>0.0674</Discount>
<ReturnFlag>A</ReturnFlag>
<LineStatus>F</LineStatus>
<ShipDate>1994-08-18</ShipDate>
</LineItem>
<LineItem>
<LineNumber>3</LineNumber>
<ExtendedPrice>64247.0000</ExtendedPrice>
<Discount>0.0396</Discount>
<ReturnFlag>R</ReturnFlag>
<LineStatus>F</LineStatus>
<ShipDate>1994-10-21</ShipDate>
</LineItem>
</Order>
. . .
</Orders>
XQuery:
<results> {
for $lineitem in collection("tpch")/Orders/Order/LineItem
let $returnflag := $lineitem/ReturnFlag
let $linestatus := $lineitem/LineStatus
where $lineitem/ShipDate <= "1998-08-31"
group by $returnflag, $linestatus
order by $returnflag, $linestatus
return
<record>
<sum_disc_price>{sum($lineitem/ExtendedPrice*(1-$lineitem/Discount))}</sum_disc_price>
</record>
} </results>
BaseX output:
[XPTY0004] Item expected, sequence found: (element ExtendedPrice {...},
......
My question: Considering this dataset model, how can I to write this query
without change its semantics?
I wouldn't want to use extra functions (e.g., fn:for-each), because I need
to submit the same query in an limited xquery processor.
Thanks in advance!
--
Luiz Matos
PhD student at Federal Fluminense University