Sql server 如何在SQL Server中创建多级层次结构
我正在SQL Server中创建多级层次结构。我怎样才能创造呢 这是我的表格数据-Sql server 如何在SQL Server中创建多级层次结构,sql-server,sql-server-2012,Sql Server,Sql Server 2012,我正在SQL Server中创建多级层次结构。我怎样才能创造呢 这是我的表格数据- ID DeptID ParentID FolderName 1 1 0 2 2 1 1 2.1 3 1 1 2.2 4 1 1 2.3 5 1 2 2.1.1 6 1 2 2.1.2 7 1 2
ID DeptID ParentID FolderName
1 1 0 2
2 1 1 2.1
3 1 1 2.2
4 1 1 2.3
5 1 2 2.1.1
6 1 2 2.1.2
7 1 2 2.1.3
8 1 2 2.1.4
9 1 5 2.1.1.1
10 1 5 2.1.1.2
11 1 5 2.1.1.3
12 2 0 1
13 3 0 3
我想要下面的结果
ID DeptID ParentID FolderName
1 1 0 2
2 1 1 2.1
5 1 2 2.1.1
9 1 5 2.1.1.1
10 1 5 2.1.1.2
11 1 5 2.1.1.3
6 1 2 2.1.2
7 1 2 2.1.3
8 1 2 2.1.4
3 1 1 2.2
4 1 1 2.3
12 2 0 1
13 3 0 3
如果您已经有了
FolderName
列,一些简单的替换和转换会将其转换为hierarchyid
,它已经了解如何按层次进行排序:
declare @t table (ID int,DeptID int, ParentID int, FolderName varchar(900))
insert into @t(ID, DeptID, ParentID, FolderName) values
(1 ,1,0,'2'),
(2 ,1,1,'2.1'),
(3 ,1,1,'2.2'),
(4 ,1,1,'2.3'),
(5 ,1,2,'2.1.1'),
(6 ,1,2,'2.1.2'),
(7 ,1,2,'2.1.3'),
(8 ,1,2,'2.1.4'),
(9 ,1,5,'2.1.1.1'),
(10,1,5,'2.1.1.2'),
(11,1,5,'2.1.1.3'),
(12,2,0,'1'),
(13,3,0,'3')
;With Abc as (
select
*,
CAST('/' + REPLACE(FolderName,'.','/') + '/' as hierarchyid) as FolderNameRightType
from
@t
)
select
*
from
Abc
order by FolderNameRightType
结果:
ID DeptID ParentID FolderName FolderNameRightType
----------- ----------- ----------- -------------------- -----------------------
12 2 0 1 0x58
1 1 0 2 0x68
2 1 1 2.1 0x6AC0
5 1 2 2.1.1 0x6AD6
9 1 5 2.1.1.1 0x6AD6B0
10 1 5 2.1.1.2 0x6AD6D0
11 1 5 2.1.1.3 0x6AD6F0
6 1 2 2.1.2 0x6ADA
7 1 2 2.1.3 0x6ADE
8 1 2 2.1.4 0x6AE1
3 1 1 2.2 0x6B40
4 1 1 2.3 0x6BC0
13 3 0 3 0x78
提到的文件夹名称值是虚拟的。