22,210
社区成员
发帖
与我相关
我的任务
分享
with temp_users as
(
select UserID,LoginName,FatherUserID,1 as [level] from Users where UserID=1
union all
select A.UserID,A.LoginName,A.FatherUserID,A.IsValid,B.[level]+1 from Users A,temp_users B where A.FatherUserID=B.UserID
)
select * from temp_users
这条语。我多写一个字段A.IsValid
select A.UserID,A.LoginName,A.FatherUserID,A.IsValid,B.[level]+1 from Users A,temp_users B where A.FatherUserID=B.UserID
select UserID,LoginName,FatherUserID,cast(1 as int) as [level] from Users where UserID=1
cast(1 as int) as [level] 这里必须要定义一临时字段类型 ,我的数据是sql 2005的。不知道你的怎么样成功!不过也谢谢你的热心帮助。呵呵!!
select identity(int,1,1)userid,* into #t from(
select 'name1'LoginName,0 FatherUserID
union all select 'name2', 1
union all select 'name3', 1
union all select 'name4', 2
union all select 'name5', 2
union all select 'name6', 4
union all select 'name7', 4
)a
;with temp_users as
(
select UserID,LoginName,FatherUserID,1 as levle from #t where UserID=1
union all
select A.UserID,A.LoginName,A.FatherUserID,B.levle+1 from #t A,temp_users B where A.FatherUserID=B.UserID
)
select * from temp_users
/*
UserID LoginName FatherUserID levle
1 name1 0 1
2 name2 1 2
3 name3 1 2
4 name4 2 3
5 name5 2 3
6 name6 4 4
7 name7 4 4
*/
with temp_users as
(
select UserID,LoginName,FatherUserID,cast(1 as int) as [level] from Users where UserID=1
union all
select A.UserID,A.LoginName,A.FatherUserID,b.[level]+1 as [level] from Users A,temp_users B where A.FatherUserID=B.UserID
)
select * from w_users
;with temp_users as
(
select UserID,LoginName,FatherUserID,1 as levle from #t where UserID=1
union all
select A.UserID,A.LoginName,A.FatherUserID,B.levle+1 from #t A,temp_users B where A.FatherUserID=B.UserID
)
select * from temp_users