sql server利用cte递归查询
- 1.数据环境准备
参考Oracle递归查询文章。
- 2.查询某个节点下的所有子节点
with cte(id,name,parent_id) as
(
select id,name,parent_id from SC_DISTRICT where name='巴中市'
union all
select sd.id,sd.name,sd.parent_id from SC_DISTRICT sd ,cte c where c.id = sd.parent_id )select * from cte result:
id name parent_id
巴中市
巴州区
通江县
平昌县
大寨乡
响滩镇
龙岗镇
白衣镇
- 3.计算层级(类似Oracle的level伪列)
with cte(id,name,parent_id,lev) as
(
select id,name,parent_id, from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,sd.parent_id,c.lev+ from SC_DISTRICT sd,cte c where c.id=sd.parent_id
)
select * from cte result:
id name parent_id lev
达州市
通川区
宣汉县
塔河乡
三河乡
胡家镇
南坝镇
- 4.查询路径的根节点(类似Oracle的connect_by_root)
with cte(id,name,parent_id,rootid,rootname) as
(
select id,name,parent_id,id rootid,name rootname from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,sd.parent_id,cte.rootid,cte.rootname from SC_DISTRICT sd,cte where sd.parent_id=cte.id
)
select * from cte result:
id name parent_id rootid rootname
达州市 达州市
通川区 达州市
宣汉县 达州市
塔河乡 达州市
三河乡 达州市
胡家镇 达州市
南坝镇 达州市
- 5.查询递归路径(类似Oracle的sys_connect_by_path)
with cte(id,name,pathname) as
(
select id,name,cast(name as nvarchar) from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,cast(cte.pathname+'_'+sd.name as nvarchar) from SC_DISTRICT sd,cte where sd.parent_id=cte.id
)
select * from cte with cte(id,name,pathname) as
(
select id,name,convert(nvarchar,name) from SC_DISTRICT where name='达州市'
union all
select sd.id,sd.name,convert(nvarchar,cte.pathname+'_'+sd.name) from SC_DISTRICT sd,cte where sd.parent_id=cte.id
)
select * from cte result:
id name pathname
达州市 达州市
通川区 达州市_通川区
宣汉县 达州市_宣汉县
塔河乡 达州市_宣汉县_塔河乡
三河乡 达州市_宣汉县_三河乡
胡家镇 达州市_宣汉县_胡家镇
南坝镇 达州市_宣汉县_南坝镇
sql server利用cte递归查询的更多相关文章
- SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)
SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...
- SQL Server中CTE的另一种递归方式-从底层向上递归
SQL Server中的公共表表达式(Common Table Expression,CTE)提供了一种便利的方式使得我们进行递归查询.所谓递归查询方便对某个表进行不断的递归从而更加容易的获得 ...
- SQL Server 利用游标解决Tempdb究极竞争-DBA-程序员需知
SQL Server tempdb分配竞争算是DBA老生常谈的问题了,几乎现在所有的DBA都知道多建几个文件来解决/缓解问题.但是深层次的的竞争依旧不可避免.这里给大家剖析下游标在tempdb中的特点 ...
- SQL Server 利用锁提示优化Row_number()-程序员需知
网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速 ...
- SQL Server 利用Profiler观察执行计划是否重用时SP:Cachemiss,SP:CacheInsert以及SP:CacheHit的含义
本文出处:http://www.cnblogs.com/wy123/p/6913055.html 执行计划的缓存与重用 在通过SQL Profile观察一个SQL语句或者存储过程是否有可用的缓存执行计 ...
- [SQL Server]利用索引改善sql语句
很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: 1.select * from table1 where name=''z ...
- SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串
在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...
- SQL Server 利用WITH AS递归获取层级关系数据
WITH AS短语,也叫做子查询部分(subquery factoring),在SQL Server 2005中提供了一种解决方案,这就是公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性 ...
- sql server 利用发布订阅方式实现数据库同步问题
删除本地快发布时报错: 无法作为数据库主体执行,因为主体 "dbo" 不存在.无法模拟这种类型的主体,或您没有所需的权限.已将数据库上下文更改为 'numberForcast'. ...
随机推荐
- linux第七周
可执行程序的装载 一.预处理.编译.链接和目标文件的格式 可执行文件的创建——预处理.编译和链接 cd Code vi hello.c gcc -E -o hello.cpp hello.c -m32 ...
- shell判断文件,目录是否存在或者具有权限的代码
核心代码 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" #这里的 ...
- Mac 下安装Java
下载:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 打开下载的文件,出现如下 ...
- 【Python】实现对大文件的增量读取
背景 前段时间在做一个算法测试,需要对源于日志的数据进行分析才能获取到结果:日志文件较大,所以想要获取数据的变化曲线,增量读取是最好的方式. 网上有很多人的技术博客都是写的用for循环readline ...
- Android之自定义控件实现天气温度折线图和饼状图
以前写了个天气的APP,最近把他更新了一个版本,就抽取其中的天气温度折现图这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 效果如图: 代码: MainActivity.Java /**** * ...
- Android Studio 中删除项目和项目找回------ Project Structure的使用
删除项目 点击File——Project Structure 在Project Structure页面,选中要删除的项目,点击上面的减号图标. 我把两个一起删除了,再次打开时,啥也没有 如果想要把不要 ...
- 【MVC】MusicStore相关资料
引言 当你对MVC的项目结构有一定了解时,那就可以开始学习一个世界级的MVC入门demo--MusicStore.学习的绝招就是把它抄一遍. 相关资料 MVC Music Store Codeple ...
- halcon之屌炸天的变形匹配(1)
在日常工程应用中,我们通常通过halcon的 shape-based matching(形状匹配)进行各种定位, 如以前文章介绍的这样,理解各个参数并灵活应用通常就能得到很好的匹配效果和匹配速度, 当 ...
- 处理ListView数据为空的情况
如何处理需要填充的数据为空的情况? ListView及其他继承自AdapterView的类都有一个简便的处理这种情况的方法:setEmptyView(View). 当ListView的Adapter为 ...
- C++设计模式之中介者模式
中介者模式:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了 ...