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 行受影响)
*/
[解决办法]
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
