ネストされたセットモデルを使用しています。このモデルは、後でWebサイトのサイトマップを作成するために使用されます。これが私のテーブル構造です。
create table departments (
id int identity(0, 1) primary key
, lft int
, rgt int
, name nvarchar(60)
);
insert into departments (lft, rgt, name) values (1, 10, 'departments');
insert into departments (lft, rgt, name) values (2, 3, 'd');
insert into departments (lft, rgt, name) values (4, 9, 'a');
insert into departments (lft, rgt, name) values (5, 6, 'b');
insert into departments (lft, rgt, name) values (7, 8, 'c');
名前だけでなく深さで並べ替えるにはどうすればよいですか?できます
select
replicate('----', count(parent.name) - 1) + ' ' + node.name
, count(parent.name) - 1 as depth
, node.lft
from
departments node
, departments parent
where
node.lft between parent.lft and parent.rgt
group by
node.name, node.lft
order by
depth asc, node.name asc;
ただし、それは何らかの理由で子供と親を一致させません。
department lft rgt
---------------------------
departments 0 1
---- a 1 4
---- d 1 2
-------- b 2 5
-------- c 2 7
ご覧のとおり、部門「d」には部門「a」の子があります。
ありがとうございました。