基于如下表递归排序T-SQL查询
ID Path
---------------------------------------
1 \\Root
2 \\Root\Node0
3 \\Root\Node0\Node1
4 \\Root\Node0\Node2
5 \\Root\Node3
6 \\Root\Node3\Node4
7 \\Root\Node5
...
N \\Root\Node5\Node6\Node7\Node8\Node9\Node10
等上......
有此表中约1000行。我想在单独的列中显示单个节点。要显示的最大列数5(即直到5级深的节点)。所以输出 看起来如下
ID Path Level 0 Level 1 Level 2 Level 3 Level 4 Level 5
----------------------------------------------------------------------------------------
1 \\Root Root Null Null Null Null Null
2 \\Root\Node0 Root Node 0 Null Null Null Null
3 \\Root\Node0\Node1 Root Node 0 Node 1 Null Null Null
4 \\Root\Node0\Node2 Root Node 0 Node 2 Null Null Null
5 \\Root\Node3 Root Node 3 Null Null Null Null
6 \\Root\Node3\Node4 Root Node 3 Node 4 Null Null Null
7 \\Root\Node5 Root Node 5 Null Null Null Null
...
N (see in above table) Root Node 5 Node 6 Node 7 Node 8 Node 9
我能想到的唯一方法是通过每一行打开游标,循环和执行字符串分割,只取前5个节点,然后插入到一个临时表。
请建议。
感谢
SQL Server 2008具有hierarchyId(http://technet.microsoft.com/zh-cn/library/bb677173.aspx)。完全推荐。它支持像GetLevel和GetAncestor这样的有用方法,它们可以一起用来解决这个问题。当然,这会作为一个答案作弊,因为它改变了输入表格架构:-) – 2010-06-17 05:29:34