Ant*_*ull 5 sql xquery sql-server-2005
在将XML分解为SQL Server视图中的行时,如何返回元素序列?
样本输入:
<ol>
<li>Smith</li>
<li>Jones</li>
<li>Brown</li>
</ol>
Run Code Online (Sandbox Code Playgroud)
期望的输出:
Sequence Name
-------- -----------
1 Smith
2 Jones
3 Brown
Run Code Online (Sandbox Code Playgroud)
现有观点:
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)
Run Code Online (Sandbox Code Playgroud)
Mik*_*son 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)
Run Code Online (Sandbox Code Playgroud)
参考:使用 Adam Machanic的DENSE_RANK唯一识别XML节点.