2014-04-03 49 views
1

我想通過區域的名稱獲取區域的名稱,產品的數量和產品的最小庫存訂單的面額。XQuery中的min()函數

我幾乎得到了除了不打印任何東西的面額外。

我的代碼:

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

回答

3

你是不是限制$deno到當前區域,所以對於produc s的相同stock_minimo,這將返回一個序列而不是單個項目的。所以,你應該先添加另一個謂詞區:

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

但是,如果有過2 produc用相同min(stock_minimo)同一區域內,你將有同樣的問題,所以你可以制定此計劃在您的輸出通過使用string-join代替concat

concat('Zona:', $nomzona,' ', 
     'Productes:', $numero,' ', 
     'Mínim stock:', string-join($deno, ', ') ... 
+0

非常感謝您的幫助。優秀的解釋。 – user3325719

+0

@ user3325719如果您還有其他問題,請告訴我。如果沒有,請接受答案:) – wst