日期:2014-05-17  浏览次数:20386 次

SQL排成树状结构
ModuleID ModuleName ParentID
10  系统配置     0
11  模块管理     10
12  添加模块     11
14  模块列表     11
15  角色管理     10
16  添加角色     15
17  角色列表     15
25  用户管理     0
26  添加用户     25
27  用户列表     25
28  权限管理     10

怎么排成树状的结构?

ModuleID ModuleName ParentID
10  系统配置     0
11  模块管理     10
12  添加模块     11
14  模块列表     11
15  角色管理     10
16  添加角色     15
17  角色列表     15
28  权限管理     10
25  用户管理     0
26  添加用户     25
27  用户列表     25
------解决方案--------------------
想不出什么好的办法
--CREATE TABLE  test (ModuleID INT , ModuleName NVARCHAR(10),ParentID int )
 --INSERT INTO test 
 -- SELECT 10,  '系统配置' ,    0
 --UNION ALL SELECT 11,  '模块管理' ,    10
 --UNION ALL SELECT 12,  '添加模块' ,    11
 --UNION ALL SELECT 14,  '模块列表' ,    11
 --UNION ALL SELECT 15,  '角色管理' ,    10
 --UNION ALL SELECT 16,  '添加角色' ,    15
 --UNION ALL SELECT 17,  '角色列表' ,    15
 --UNION ALL SELECT 25,  '用户管理' ,    0
 --UNION ALL SELECT 26,  '添加用户'  ,   25
 --UNION ALL SELECT 27,  '用户列表' ,    25
 --UNION ALL SELECT 28,  '权限管理',     10
 with t AS (SELECT ROW_NUMBER() OVER(ORDER BY moduleid )id,*
  FROM test 
  WHERE ParentID=0
  UNION ALL 
 SELECT t.id,b.moduleid,b.modulename,b.parentid
 FROM t INNER JOIN test b ON t.ModuleID=b.ParentID)
 SELECT ModuleID ,ModuleName ,ParentID FROM t
 ORDER BY id,moduleid,parentid
 /*
 ModuleID    ModuleName ParentID
 ----------- ---------- -----------
 10          系统配置       0
 11          模块管理       10
 12          添加模块       11
 14          模块列表       11
 15          角色管理       10
 16          添加角色       15
 17&