SQL排成树状结构,该怎么处理

SQL排成树状结构ModuleID ModuleName ParentID10 系统配置011 模块管理1012 添加模块1114 模块列表1115 角

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          角色列表       15


 28          权限管理       10
 25          用户管理       0
 26          添加用户       25
 27          用户列表       25
 
 (11 行受影响)
 */


[解决办法]
引用:
想不出什么好的办法


SQL code



1234567891011121314151617181920212223242526272829303132333435363738

--CREATE TABLE  test (ModuleID INT , ModuleName NVARCHAR(10),ParentID int )  --INSERT INTO test   ……

BOM按节点排序 就这样 你还想哪样?

[解决办法]
还可以加上缩进层次的


declare @t TABLE(ModuleID INT , ModuleName NVARCHAR(10),ParentID int )
INSERT INTO @t 
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 cte as
(
select *,1 flevel,cast(ModuleName as nvarchar(4000)) fo from @t where ParentID=0
union all
select b.*,a.flevel+1,fo+'\'+b.ModuleName  from cte a 
join @t b on a.ModuleNameID=b.ParentID
)
select * from cte
order by fo

[解决办法]
楼主的意思是在UI端显示出树状结构?
[解决办法]
弄了半天还没有注意楼上大哥都回答了  我们的做法都是一样的

declare @tx TABLE(ModuleID INT , ModuleName NVARCHAR(20),ParentID int )
INSERT INTO @tx 
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 cte_table as(select *,1 F,cast(ModuleName as nvarchar(4000)) M  from @tx where ParentID = 0 


union all 
select t.*,ct.F+1,M+','+t.ModuleName from cte_table as ct,@tx as t where ct.ModuleID = t.ParentID)
select ct.ModuleID,ct.ModuleName,ct.ParentID from cte_table as ct order by ct.M


SQL排成树状结构,该怎么处理