/ / Зберегти порядок елементів при подрібненні даних XML на рядки SQL - sql, sql-server-2005, xquery

Зберігайте порядок елементів при подрібненні даних XML у рядках SQL - sql, sql-server-2005, xquery

Як повернути послідовність елементів при подрібненні XML на рядки у поданні SQL Server?

Вхідний приклад:

<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)

Відповіді:

11 за відповідь № 1

Ви можете використовувати 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)

Ref: Унікальна ідентифікація вузлів XML за допомогою DENSE_RANK Адам Маханіч.