SQL Server 2008中的CTE递归查询得到一棵树(按照每颗树的架构排列)
来源:互联网 发布:飞利浦音响知乎 编辑:程序博客网 时间:2024/06/05 07:21
感觉这个CTE递归查询蛮好用的,先举个例子:
上面的SQL语句再次插入一条数据:
insert Tree values('网络1班','网络工程')
运行结果如下图:
图1 运行结果
注意点:貌似在递归成员处所选择的字段都必须Tree表的数据,而不能是CTE结果集中的除了Tree中没有而CTE中有的字段在这里才可以引用,比如字段TE。
首先看下,遍历的第1条记录的SQL语句:
获取的结果为:
Name Parent TE Levle
-------------------------------------
大学 NULL 大学 0
递归第2次所获取的结果集合的类SQL语句为:
上面的CTE子查询的结果就是第一次递归查询的结果集,上面SQL运行结果为:
同样的,将第二次递归查询的上面三条记录作为第三次查询的‘定位成员’:
【这里要注意,上面的三条记录是从最后一条开始依次作为第三次递归的输入的,即第一条是ID=9的记录,接下来是7和2,关于第四次递归也类似】
第三次递归类SQL语句
结果如下:
其实每次递归的类SQL可为如下所示:
第四次递归一次类推,最后所查询的结果为上面所有递归的union。
续:在上面的SQ语句查询结果中,ID为10的记录应该要放在ID为4的后面。
往数据表中再次添加两条记录:
insert Tree values('计科','计算机学院')
insert Tree values('我','网络1班')
再次修改上面的SQL语句:
最后的结果为:
图2 运行结果
这样,无论用户插入多少条记录都可以进行按部门,按规律进行查询。
自我习惯加了个显示列(根据oracle的习惯)
oracle 递归:
select lpad(level, level * 2 + 1, '_'),ROWNUM,T.* from kymy_user T
where -- level<4 join_date < to_date('2017-04-05','yyyy-mm-dd')
start with id =27590 connect by prior id = SERVICE_id;
sqlserver递归:
with CTE as
(
select ID, Name,Parent,
CAST(0 as nvarchar(MAX)) as TE,
ROW_NUMBER()over(order by getdate()) as OrderID,0 level
from [LF_TEST].[dbo].[tb_tree] where Parent is null
union all
select Tree1.ID,
Tree1.Name,
Tree1.Parent,
cast(replicate('_',CTE.level+1)+cast(CTE.level+1 as nvarchar(MAX)) as nvarchar(MAX)) as TE,
CTE.OrderID*100+ROW_NUMBER()over(Order by GETDATE()) as OrderID,
CTE.level+1 level
from [LF_TEST].[dbo].[tb_tree] Tree1 inner join CTE
on Tree1.Parent=CTE.Name
)
select * from CTE order by LTRIM(OrderID)
转载自:http://blog.csdn.net/bin_520_yan/article/details/5998349
- SQL Server 2008中的CTE递归查询得到一棵树(按照每颗树的架构排列)
- SQL Server 2005中的CTE递归查询得到一棵树
- SQL Server 2005中的CTE递归查询得到一棵树
- SQL Server 2008中的CTE递归查询
- SQL Server 2008中的CTE递归查询
- SQL Server 2008中的CTE递归查询
- SQLServer2005中的CTE递归查询得到一棵树
- SQL Server 中的 CTE 递归查询
- SQL Server中的CTE递归查询
- 利用SQL SERVER 2005 中的CTE 实现树的递归
- 利用SQL SERVER 2005 中的CTE 实现树的递归
- 巧用SQL Server的CTE 实现递归查询
- Sql Server 使用CTE实现递归查询
- SQL Server CTE 递归查询全解
- SQL SERVER中CTE语句结构及CTE递归查询
- SQL Server 2005中使用公用表表达式的递归查询(CTE是个好东西)
- SQL递归查询CTE
- SQL SERVER 递归 CTE
- JAVA简单理解自动装箱与自动拆箱
- android一键添加QQ群,关注微信公众号
- MYSQL group by 使用理解
- 学习笔记:View的事件体系2:View的滑动
- C# 画条形码
- SQL Server 2008中的CTE递归查询得到一棵树(按照每颗树的架构排列)
- Lintcode 三数之和
- 栈
- iOS自动化打包之在Xcode8.2.1之上没有PackageApplication指令的解决方法
- http://blog.csdn.net/peace1213/article/details/50849940
- 关于conn /as sysdba 无需密码直接可以连接的疑问
- AndroidManifest文件中属性<application android:allowBackup="false">
- ubuntu14.04上网问题
- https://www3.oculus.com/en-us/setup/