Как выполнить сортировку документов по типу, выбранному динамически, а затем отсортировать по количеству - PullRequest
0 голосов
/ 13 марта 2019

Требование:

  1. Результаты поиска возвращают список заказов на покупку
  2. Заказ на поставку может иметь или не иметь позицию (для примера)
  3. Для заказа на покупку могут быть тысячи позиций
  4. Для типа будет только 1 позиция (без дубликатов в заказе на покупку)
  5. Для сортировки:
  6. Мы будем знать, какой тип был выбран для сортировки, и нам нужен только порядок сортировки на основе суммы для этого конкретного типа
  7. Для сортировки будет выбран только 1 тип
  8. Другое использованиефутляры могут сортировать различные элементы

Образец документа:

<purchase-order>
  <line-items>
    <line-item type=lamp  amount=3500 </line-item>
    <line-item type=couch  amount=50000 </line-item>
    <line-item type=chair  amount=40000 </line-item>
  </line-items>
  <other-stuff></other-stuff>
</purchase-order>

1 Ответ

0 голосов
/ 14 марта 2019

Во-первых, ваш xml неправильно сформирован: Я использовал ниже XML и запрос:

     let $input :=
          <purchase-order>
           <line-items>
            <line-item type="lamp"  amount="52"/>
            <line-item type="lamp"  amount="40000"/>
            <line-item type="lamp"  amount="3500"/>
            <line-item type="lamp"  amount="3500"/>
            <line-item type="couch"  amount="50000"/>
            <line-item type="chair"  amount="110000"/>
            <line-item type="chair"  amount="5000"/>
            <line-item type="chair"  amount="80000"/>
          </line-items>
          <other-stuff></other-stuff>
        </purchase-order>

         let $purchase-order := 
          for $each-type in distinct-values($input/line-items/line-item/@type)
          let $seq := $input/line-items/line-item[@type = $each-type]
          order by $each-type
          return 
             <line-items type="{$each-type}">
             {
             for $one in $seq
             order by xs:integer($one/@amount)
             return $one
             }
             </line-items>
             return <purchase-order>{$purchase-order}</purchase-order>

Вывод генерируется по запросу:

              <purchase-order>
                <line-items type="chair">
                <line-item amount="5000" type="chair"/>
                <line-item amount="80000" type="chair"/>
                <line-item amount="110000" type="chair"/>
                </line-items>
                <line-items type="couch">
                <line-item amount="50000" type="couch"/>
                </line-items>
                <line-items type="lamp">
                <line-item amount="52" type="lamp"/>
                <line-item amount="3500" type="lamp"/>
                <line-item amount="3500" type="lamp"/>
                <line-item amount="40000" type="lamp"/>
                </line-items>
              </purchase-order>

Надеюсь, ваше требование полностью заполнит этот запрос.

...