2015-07-22 4 views
0

Следующий запрос возвращает все заказы с заданным номером заказа. Как мне переписать его так, чтобы возвращаемые идентификаторы повторяющихся ордеров были возвращены вместе с их соответствующим именем custid и/или компанией?Поиск дубликатов и их возврат со связанной информацией в XML

DECLARE @x AS XML; 
SET @x = N' 
<CustomersOrders> 
    <Customer custid="1"> 
    <companyname>Customer NABCD</companyname> 
     <Order orderid="10692"> 
     <orderdate>2013-11-03</orderdate> 
     </Order> 
     <Order orderid="10702"> 
      <orderdate>2007-10-13</orderdate> 
     </Order> 
     <Order orderid="10693"> 
      <orderdate>2008-03-16</orderdate> 
     </Order> 
     </Customer> 
     <Customer custid="2"> 
     <companyname>Customer HMKLI</companyname> 
     <Order orderid="10308"> 
      <orderdate>2006-09-18</orderdate> 
     </Order> 
     <Order orderid="10693"> 
      <orderdate>2008-03-04</orderdate> 
     </Order> 
    </Customer> 
</CustomersOrders>'; 

SELECT @x.query('//Order[@orderid=10693]') 

EDIT:

Выходной формат будет либо ...

<CustomersOrders> 
    <Customer custid="1"> 
     <companyname>Customer NABCD</companyname> 
      <Order orderid="10693"/> 
    </Customer> 
    <Customer custid="2"> 
      <companyname>Customer HMKLI</companyname> 
      <Order orderid="10693"/> 
    </Customer> 
</CustomersOrders> 

ИЛИ (даже лучше)

<CustomersOrders> 
    <Order orderid="10693"> 
     <Customer custid="1"> 
      <companyname>Customer NABCD</companyname> 
     </Customer> 
     <Customer custid="2"> 
       <companyname>Customer HMKLI</companyname> 
     </Customer> 
    </Order> 
    </CustomersOrders>' 
+0

Учитывая, что образец XML, что должно быть на выходе * точно *, Вы можете разместить ожидаемый выход? – har07

+0

Привет, см. Мое редактирование. – SteelyDanFan

+0

Оба ожидаемого выхода плохо сформированы (некоторые элементы не закрыты должным образом) – har07

ответ

1

Это один из возможных способов:

SELECT @x.query(' 
    <CustomersOrders> 
    { 
     for $order in //Order[@orderid=10693] 
     let $customer := $order/.. 
     return 
      <Customer custid="{$customer/@custid}"> 
       {$customer/companyname} 
       <Order orderid="{$order/@orderid}"/> 
      </Customer> 
    } 
    </CustomersOrders> 
') 

выход:

<CustomersOrders> 
    <Customer custid="1"> 
    <companyname>Customer NABCD</companyname> 
    <Order orderid="10693" /> 
    </Customer> 
    <Customer custid="2"> 
    <companyname>Customer HMKLI</companyname> 
    <Order orderid="10693" /> 
    </Customer> 
</CustomersOrders> 
Смежные вопросы