sql server 2005 中的用WITH CTE中实现迭归的的应用

sql server 2000 中要实现迭归需要用函数处理.sql 2005提供了相应的迭归方法.

示例如下:

declare @t table( id int identity(1,1),name varchar(10),ParentID varchar(10))
insert into @t select 'a',''
union all select 'b',''
union all select 'a1',1
union all select 'a2',1
union all select 'b1',2
union all select 'a11',3
union all select 'a12',3
union all select 'b11',5
union all select 'b12',5
union all select 'b13',5
union all select 'a111',6
union all select 'a112',6
union all select 'a113',6
--1d=5,6 的情况
DECLARE @id AS varchar(200)
SET @id='5,6';
WITH TCTE(ID,name,ParentID,LVL)
AS

 
SELECT ID,name,ParentID,0
 
FROM @t WHERE charindex(','+ltrim(id)+',',','+@id+',')>0
 
UNION ALL
 
SELECT ta.ID,ta.name,ta.ParentID,TB.LVL+1
 
FROM @t TA INNER JOIN TCTE TB
    
ON TA.ParentID=TB.id
),
T_CTE(ID,name,ParentID,LVL)
AS

 
SELECT ID,name,ParentID,0
 
FROM @t WHERE charindex(','+ltrim(id)+',',','+@id+',')>0
 
UNION ALL
 
SELECT ta.ID,ta.name,ta.ParentID,TB.LVL+1
 
FROM @t TA INNER JOIN T_CTE TB
    
ON TA.id=TB.ParentID
)
SELECT ID,name,ParentID=case when ParentID=0 then null else ParentID end 
FROM TCTE
UNION
SELECT ID,name,ParentID=case when ParentID=0 then null else ParentID end  
FROM T_CTE 


--结果
/*
ID          name       ParentID
----------- ---------- ----------
1           a          NULL
2           b          NULL
3           a1         1
5           b1         2
6           a11        3
8           b11        5
9           b12        5
10          b13        5
11          a111       6
12          a112       6
13          a113       6

(11 行受影响)
*/

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值