Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在SQL Server中创建多级层次结构_Sql Server_Sql Server 2012 - Fatal编程技术网

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

我正在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        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

提到的文件夹名称值是虚拟的。