SqlServer递归查询树形数据

更新时间:2023-06-19 08:19:36 阅读: 评论:0

SqlServer递归查询树形数据
⼀:简单的树形数据代码如下:
-- with⼀个临时表(括号中是你要查询的列名)
with temp(ID,PID,Name,curLevel)
北京省as
(
--1:初始查询(这⾥的PID=-1 在我的数据中是最底层的根节点)
lect ID,PID,Name,1as level from dbo.T_ACL_OU
where Deleted =0and PID =-1
union all
--2:递归条件
女性腋下疼痛
lect a.ID,a.PID,a.Name, b.curLevel+1from T_ACL_OU a  --3:这⾥的临时表和原始数据表都必须使⽤别名,不然递归的时候不知道查询的是那个表的列inner join
temp b
on ( a.PID=b.id)  --这个关联关系很重要,⼀定要理解⼀下谁是谁的⽗节点
)
lect*from temp--4:递归完成后⼀定不要少了这句查询语句否则会报错
效果如图:
这⾥要注意的地⽅是注释中的 1——4的部分
⼆:带缩进的树形数据代码如下:
with temp(ID,PID,Name,curLevel)
大学高等数学as
(
--初始查询
lect ID,PID,Name,1as curLevel from dbo.T_ACL_OU
where Deleted =0and PID =-1
union all
青海湖住宿--递归条件海参小米粥的正确做法
lect a.ID,a.PID, convert(nvarchar(100),CONVERT(nvarchar(100), REPLICATE ('', b.curLevel+1)+a.Name)) as Name , b.curLevel+1--这⾥的REPLICATE函数⾮常重要,⽤于缩进空格⽤。不懂得可以在SQLrver中选中后按F1键
from T_ACL_OU a
感悟人生的句子inner join
temp b
on ( a.PID=b.id)
)
lect ID,PID,Name,curLevel from temp
效果如图:
三:查询是否有⼦节点
with temp(ID,PID,HandNo,Name,curLevel,pLevel,haveChild)
as
(
--初始查询
lect ID,PID,HandNo,Name,1as level,0as pLevel,1as haveChild from dbo.T_ACL_OU
where Deleted = 0 and PID = -1
union all
--递归条件
lect a.ID,a.PID,a.HandNo,a.Name, b.curLevel+1,b.curLevel,haveChild = (ca when exists(lect1from T_ACL_OU where T_ACL_OU.PID=a.id) then 1el0 end)--(lect1from T_ACL_OU where exists(lect1from T_ACL_OU where a.PID=b.id))
from T_ACL_OU a机关党委工作总结
inner join
temp b
on ( a.PID=b.id)
高考百日誓师大会
)
lect * from temp order by pLevel
效果如图:
这3段代码可以直接复制使⽤,修改⼀下表名和要查询的列名基本上都是通⽤的,写的⽐较简单,如果⼤家有什么意见建议请留⾔交流谢谢。

本文发布于:2023-06-19 08:19:36,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1045315.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查询   递归   数据   树形   代码
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图