XQuery中的min()函数

时间:2014-04-03 15:11:31

标签: xquery

我希望得到区域的名称,产品数量和产品面额以及最小库存订单的区域名称。

除了面额之外,我几乎得到了所有东西。

我的代码:

for $zone in distinct-values(/productos/produc/cod_zona)
let $numero := count(/productos/produc[cod_zona = $zone]/cod_prod)
let $nomzona:=/zonas/zona[cod_zona = $zone]/nombre
let $minimo :=min(/productos/produc[cod_zona = $zone]/stock_minimo)
let $deno :=/productos/produc[stock_minimo=$minimo]/denominacion
order by $nomzona ascending
return concat( 'Zona:', $nomzona,'   ',
               'Productes:', $numero,'   ',
               'Mínim stock:', $deno

结果:

Zona:Andalucía   Productes:2   Mínim stock: //here must be print like that "Placa base "
Zona:Extremadura-Galicia   Productes:3   Mínim stock:
Zona:Levante-Cataluña   Productes:4   Mínim stock:
Zona:Madrid-CENTRO   Productes:4   Mínim stock:

productos.xml:

<productos>
<TITULO>DATOS DE LA TABLA PRODUCTOS</TITULO>
<produc>
    <cod_prod>1010</cod_prod>
    <denominacion>Placa Base MSI G41M-P26</denominacion>
    <precio>50</precio>
    <stock_actual>10</stock_actual>
    <stock_minimo>3</stock_minimo>
    <cod_zona>10</cod_zona>
</produc>
<produc>
    <cod_prod>1011</cod_prod>
    <denominacion>Micro Intel Core i5-2320</denominacion>
    <precio>120</precio>
    <stock_actual>3</stock_actual>
    <stock_minimo>5</stock_minimo>
    <cod_zona>10</cod_zona>
</produc>
<produc>
    <cod_prod>1012</cod_prod>
    <denominacion>Micro Intel Core i5 2500</denominacion>
    <precio>170</precio>
    <stock_actual>5</stock_actual>
    <stock_minimo>6</stock_minimo>
    <cod_zona>20</cod_zona>
</produc>
<produc>
    <cod_prod>1013</cod_prod>
    <denominacion>HD Seagate Barracuda 250GB SATA</denominacion>
    <precio>80</precio>
    <stock_actual>10</stock_actual>
    <stock_minimo>5</stock_minimo>
    <cod_zona>20</cod_zona>
</produc>
<produc>

另一个xml: zonas.xml:

<zonas>
<TITULO>DATOS DE LA TABLA ZONAS</TITULO>
<zona>
    <cod_zona>10</cod_zona>
    <nombre>Madrid-CENTRO</nombre>
    <director>Pedro Martín</director>
</zona>
<zona>
    <cod_zona>20</cod_zona>
    <nombre>Extremadura-Galicia</nombre>
    <director>Alicia Pérez</director>
</zona>
<zona>

我做错了什么?

感谢/格拉西亚斯/的Merci

1 个答案:

答案 0 :(得分:3)

您并未将$deno限制在当前区域,因此对于produc具有相同stock_minimo的{​​{1}},这将返回序列而不是单个项目。所以你应该首先为zone添加另一个谓词:

let $deno := /productos/produc[cod_zona = $zone][stock_minimo=$minimo]/denominacion

但是,如果同一个区域中只有两个produc具有相同的min(stock_minimo),那么您将遇到同样的问题,因此您可以使用{{1}在输出中对此进行规划而不是string-join

concat