SQL SERVER CTE遞迴演算法

2021-06-11 01:51:13 字數 1592 閱讀 7304

可以用於treew上面

建立乙個表:

create table test

(indexid int,

textvalue nvarchar(20),

parentid int

)插入一些測試資料:

insert into test values(1,'10',0)

insert into test values(2,'20',0)

insert into test values(3,'30',0)

insert into test values(4,'40',0)

insert into test values(5,'50',0)

insert into test values(10,'100',1)

insert into test values(11,'110',1)

insert into test values(12,'120',1)

insert into test values(100,'1000',10)

insert into test values(110,'1100',10)

insert into test values(120,'1200',10)

insert into test values(130,'1300',10)

insert into test values(1000,'10000',100)

insert into test values(1100,'11000',100)

insert into test values(1200,'12000',100)

insert into test values(1300,'13000',100)

insert into test values(20,'200',2)

insert into test values(21,'210',2)

insert into test values(22,'220',2)

insert into test values(200,'2000',20)

insert into test values(210,'2100',20)

執行測試sql語句:

gowith directreports (indexid, textvalue,parentid,level)as(

select e.indexid, e.textvalue,e.parentid, 0 as level

from test as e where indexid=1 --起始節點

union all --用於合併兩個或多個 select 語句的結果集。

select e.indexid, e.textvalue,e.parentid,level + 1

from test as e

inner join --在表中存在至少乙個匹配時,inner join 關鍵字返回行。

directreports as d

on e.parentid = d.indexid

)select indexid, textvalue,parentid,level from directreports

go執行結果如圖:

遞迴算年齡

問題描述1 第1個人10歲,第2個人比第乙個人大3歲,第3個人比第2個人大3歲 第8個人比第7個人大3歲,那麼第8個人是多少歲?public class getage 測試 public static void main string args 問題描述2 第8個人的年齡是36歲,第7個人比第8個人...

遞迴之算24

給出4個小於10的正整數,你可以使用加減乘除以及括號把這四個數字連線起來得到乙個表示式,現在的問題是,是否存在一種方式使得到的結果剛好為24,這裡加減乘除以及括號的運算結果以及優先順序和我們平時的定義一樣,除法是實數除法 例 5 5 5 1 5 5 1 5 24 1 1 4 2 無法得到24 inc...

百練2787 算24(遞迴)

總時間限制 3000ms 記憶體限制 65536kb 描述 給出4個小於10的正整數,你可以使用加減乘除4種運算以及括號把這4個數連線起來得到乙個表示式。現在的問題是,是否存在一種方式使得得到的表示式的結果等於24。這裡加減乘除以及括號的運算結果和運算的優先順序跟我們平常的定義一致 這裡的除法定義是...