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'. ...
随机推荐
- 20145309李昊《网络对抗》MSF应用基础
实验内容 掌握metasploit的基本应用方式1.主动攻击——ms08_0672.针对浏览器的攻击——ms11_0503.针对客户端的攻击——Adobe4.成功应用一个辅助模块——scanner/d ...
- Javaworkers团队第一周项目总结
项目名称:游戏贪吃蛇 项目介绍: 贪吃蛇是一款相当经典的小游戏,我们团队决定用我们现有的java知识来实现它. 具体设计: 对象:蛇.果实 方向键:控制蛇的运动. 空格键:暂停游戏 ESC:推出游戏( ...
- POJ 3169 Layout(差分约束+最短路)题解
题意:有一串数字1~n,按顺序排序,给两种要求,一是给定u,v保证pos[v] - pos[u] <= w:二是给定u,v保证pos[v] - pos[u] >= w.求pos[n] - ...
- Gym - 101334C 3514 无向仙人掌
http://codeforces.com/gym/101334/attachments 题意: 判断是否是仙人掌图并且连通,如果是的话则计算出它有多少个连通子图也是仙人掌. 思路:连通子图也就是我们 ...
- shell 判断一个字符串是否为空
test.sh #!/bin/bash echo "enter the string:" read filename if test $filename ; then echo & ...
- 快递100API接口调用代码示例
package com.util; import java.io.IOException; import java.io.InputStream; import java.net.MalformedU ...
- vim 将文件从dos格式转换到unix格式
dos格式文件传输到unix系统时,会在每行的结尾多一个^M(/r),当然也有可能看不到.但是在vim的时候,会在下面显示此文件的格式,比如 "dos.txt" [dos] 120 ...
- QtWebKit_cookie
1.百度搜索“qtwebkit cookie” 2. 2.1.qtwebkit 里 cookie 信息的保存 http://blog.tianya.cn/post-227188-33378112-1. ...
- Mac for MySQL 5.7 安装教程
一.环境 MAC OS X 10.10 二.下载MySQL 地址:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-osx10.10- ...
- HDU - 4812 D Tree 点分治
http://acm.hdu.edu.cn/showproblem.php?pid=4812 题意:有一棵树,每个点有一个权值要求找最小的一对点,路径上的乘积mod1e6+3为k 题解:点分治,挨个把 ...