• 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递归查询的更多相关文章

  1. SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

    SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...

  2. SQL Server中CTE的另一种递归方式-从底层向上递归

        SQL Server中的公共表表达式(Common Table Expression,CTE)提供了一种便利的方式使得我们进行递归查询.所谓递归查询方便对某个表进行不断的递归从而更加容易的获得 ...

  3. SQL Server 利用游标解决Tempdb究极竞争-DBA-程序员需知

    SQL Server tempdb分配竞争算是DBA老生常谈的问题了,几乎现在所有的DBA都知道多建几个文件来解决/缓解问题.但是深层次的的竞争依旧不可避免.这里给大家剖析下游标在tempdb中的特点 ...

  4. SQL Server 利用锁提示优化Row_number()-程序员需知

    网站中一些老页面仍采用Row_number类似的开窗函数进行分页处理,此时如果遭遇挖坟帖的情形可能就需要漫长的等待且消耗巨大.这里给大家介绍根据Row_number()特性采用特定锁Hint提升查询速 ...

  5. SQL Server 利用Profiler观察执行计划是否重用时SP:Cachemiss,SP:CacheInsert以及SP:CacheHit的含义

    本文出处:http://www.cnblogs.com/wy123/p/6913055.html 执行计划的缓存与重用 在通过SQL Profile观察一个SQL语句或者存储过程是否有可用的缓存执行计 ...

  6. [SQL Server]利用索引改善sql语句

    很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解.比如: 1.select * from table1 where name=''z ...

  7. SQL Server ->> 利用CONVERT/STR/FORMAT函数把浮点型数据格式化/转换成字符串

    在SQL Server下想把数字(包括浮点型和整型)转换成字符串,保留数据原本的样子或者根据需要转换成另外指定的格式可能就不仅仅是一条CAST(XXXX AS NVARCHAR)这么简单的事情了. 无 ...

  8. SQL Server 利用WITH AS递归获取层级关系数据

    WITH AS短语,也叫做子查询部分(subquery factoring),在SQL Server 2005中提供了一种解决方案,这就是公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性 ...

  9. sql server 利用发布订阅方式实现数据库同步问题

    删除本地快发布时报错: 无法作为数据库主体执行,因为主体 "dbo" 不存在.无法模拟这种类型的主体,或您没有所需的权限.已将数据库上下文更改为 'numberForcast'. ...

随机推荐

  1. nodejs 8 利用原生 util.promisify() 实现 promise.delay()

    Nodejs 8 在 util 包里新增了 promisify() .这个方法基本和 bluebird 的 promisify() 作用一样,即把最后一个参数是 callback 函数的函数变成返回 ...

  2. 20145118 《Java程序设计》第1周学习总结

    20145118 <Java程序设计>第1周学习总结 教材学习内容总结 由于寒假在家已经安装了java开发工具,所以安装过程在这里不再赘述.这一周我开始了Java初学阶段,从Java的历史 ...

  3. 四种常见的 POST 提交数据方式 专题

    定义和用法 enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码.默认地,表单数据会编码为 "application/x-www-form-urlencoded". ...

  4. 【spring-boot】 springboot整合quartz实现定时任务

    在做项目时有时候会有定时器任务的功能,比如某某时间应该做什么,多少秒应该怎么样之类的. spring支持多种定时任务的实现.我们来介绍下使用spring的定时器和使用quartz定时器 1.我们使用s ...

  5. ZOJ 3541 The Last Puzzle(经典区间dp)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3541 题意:有一排开关,有个开关有两个值t和d,t是按下开关后在t秒后会自 ...

  6. 利用IntelliJ IDEA创建第一个Groovy工程

    因为某些原因,需要学习一下Groovy.关于Groovy的入门教程请看这篇文章http://www.ibm.com/developerworks/cn/education/java/j-groovy/ ...

  7. Sql Server 开放4399端口命令行

    netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP l ...

  8. Learn Rails5.2- ActiveRecord: sqlite3的用法, Query查询语法。乐观锁和悲观锁案例,查询语法includes(), 多态关联,destory和delete, Scope, Validats, Migrations

    rails generate model photo title:string album:references 这会产生一个album_id列,当建立belongs_to关联时,需要用到. refe ...

  9. 前端jsp页面script引入url项目名使用${appName}

    <script src="/${appName}/commons/jslib/CommonValue.js"></script> 新建一个com.autum ...

  10. 用ansible剧本搭建lnmp

    首先在主服务器上搭建ansible直接用云yum装就可以, yum -y install ansible 如果copy报错一下的语句 "msg": "Aborting, ...