5

SQL ServerビューでXMLを行に細断処理す​​るときに要素シーケンスを返すにはどうすればよいですか?

サンプル入力:

<ol>
  <li>Smith</li>
  <li>Jones</li>
  <li>Brown</li>
</ol>

必要な出力:

Sequence  Name
--------  -----------
    1     Smith
    2     Jones
    3     Brown

既存のビュー:

CREATE VIEW OrderedList
AS
SELECT [Sequence] = CAST(NULL AS int)   -- TODO: Get ordinal position
       [Name] = b.b.value('.', 'nvarchar(max)')
FROM
(
    SELECT a = CAST('<ol><li>Smith</li><li>Jones</li><li>Brown</li></ol>' AS xml)
) a
CROSS APPLY a.a.nodes('/ol/li') b (b)
4

1 に答える 1

11

row_number()xmlノードで使用できます。

CREATE VIEW OrderedList
AS
SELECT [Sequence] = ROW_NUMBER() OVER(ORDER BY b.b),
       [Name] = b.b.value('.', 'nvarchar(max)')
FROM
(
    SELECT a = CAST('<ol><li>Smith</li><li>Jones</li><li>Brown</li></ol>' AS xml)
) a
CROSS APPLY a.a.nodes('/ol/li') b (b)

参照: AdamMachanicによるDENSE_RANKを使用したXMLノードの一意の識別

于 2012-04-16T12:04:17.887 に答える