1

論理列が一貫していない場合 (最初の行にヘッダーがある場合など)、xquery を使用して xml データ型を部分的に並べ替えることはできますか?

編集悪い例があり、元の質問から回答を誤解させました。typヘッダーを一番上にして、列の値を並べ替えるにはどうすればよいですか? またはその逆、rts代わりに整数列で注文しますか?

この XML が mssql XML フィールドに格納されているとします (select thexml from xmldata以下を含む 1 つの行を返します)。

<table cellpadding="2" cellspacing="3" border="1">
  <tr>
    <th>typ</th>
    <th>rts</th>
  </tr>
  <tr>
    <td>ABC</td>
    <td>26</td>
  </tr>
  <tr>
    <td>DCC</td>
    <td>21</td>
  </tr>
  <tr>
    <td>DBB</td>
    <td>4</td>
  </tr>
  <tr>
    <td>XBQ</td>
    <td>152</td>
  </tr>
  <tr>
    <td>AHI</td>
    <td>349</td>
  </tr>
</table>

ここで、これを HTML column で並べ替えたいとしますtyp。次の結果を探しています。

<table cellpadding="2" cellspacing="3" border="1">
  <tr>
    <th>typ</th>
    <th>rts</th>
  </tr>
  <tr>
    <td>ABC</td>
    <td>26</td>
  </tr>
  <tr>
    <td>AHI</td>
    <td>349</td>
  </tr>
  <tr>
    <td>DBB</td>
    <td>4</td>
  </tr>
  <tr>
    <td>DCC</td>
    <td>21</td>
  </tr>
  <tr>
    <td>XBQ</td>
    <td>152</td>
  </tr>
</table>

私のためにこれを分析できる XQuery の専門家はいますか?

4

1 に答える 1

2

特定の列で並べ替えるには、テーブルを再構築してから、ヘッダー行以外で並べ替えます。

SELECT thexml.query('
  element table {
    /table/@*,
    /table/tr[th], (: copy header :)
    for $r in /table/tr[not(th)] (: exclude header :)
    order by $r/td[1] (: $r/td[2] to sort on rts col :)
    return $r
  }')
FROM xmldata
于 2013-08-09T21:20:53.633 に答える