CTE-递归[2]
在此之前写过一个CTE的递归,取出了所有的子节点,基本上可以满足大多数的需求,这里我们来延伸一下:首先我们回顾下原来的场景
图片的上半部分递归查出某个节点的所有子节点,这个我们已经通过CTE实现了,可是有的时候我们需要全路径,也就是图片上的下半部分,怎么来弄呢,延续原来的思路,同样用CTE来实现:
CREATE TABLE #t(id VARCHAR(20),pid VARCHAR(20),NAME VARCHAR(20),fullpath varchar(200)) INSERT INTO #t
SELECT '001',NULL,'广东省','' UNION ALL
SELECT '002','001','广州市','' UNION ALL
SELECT '003','001','深圳市','' UNION ALL
SELECT '004','002','天河区','' UNION ALL
SELECT '005','003','罗湖区','' UNION ALL
SELECT '006','003','福田区','' UNION ALL
SELECT '007','003','宝安区','' UNION ALL
SELECT '008','007','西乡镇','' UNION ALL
SELECT '009','007','龙华镇','' UNION ALL
SELECT '010','007','松岗镇','' ;WITH mycte AS
(
SELECT id,pid,NAME,levels=0 FROM #t WHERE id='001' --CTE
UNION ALL
-- 字段的选取同样重要
SELECT b.id,b.pid,b.NAME,levels=levels+1 FROM mycte a,#t b WHERE b.pid=a.id --通过CTE的ID与原始表的PID来匹配记录
)
SELECT * FROM mycte ;WITH myCTE AS
(
SELECT id,pid,Convert(nvarchar(500),NAME) NAME,level=0,fullpath FROM #t WHERE id='001'--基础语句
UNION ALL
SELECT a.id,a.pid,Convert(nvarchar(500),B.NAME+'/'+Isnull(A.Name,'')),level=b.level+1,a.fullpath FROM #t a INNER JOIN myCTE b ON a.pid=b.id --循环部分
)
update #t set fullpath=b.NAME from #t a left join myCTE b on a.id=b.id
这样我们就可以轻松获取全路径了。
CTE-递归[2]的更多相关文章
- SQL Server中公用表表达式 CTE 递归的生成帮助数据,以及递归的典型应用
本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等 ...
- TSql CTE 递归原理探究
CTE是如何进行递归的?产生递归的条件有三个,分别是 初始值 自身调用自身 结束递归的条件 1,示例代码 ;with cte as ( as jd union all as jd from cte ) ...
- 8第八章CTE递归及分组汇总高级部分(多维数据集)(转载)
8第八章CTE递归及分组汇总高级部分(多维数据集) 这里贴图太麻烦...算了 UNION 等集合操作符: UNION 等以第一个 SELECT 的 列明 作为 整个结果集的列明,整个结果集 唯一认可 ...
- 第八章 CTE 递归 及 分组汇总 高级部分(多维数据集)
UNION 等集合操作符: UNION 等以第一个 SELECT 的 列明 作为 整个结果集的列明,整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 这个意思是说 只有 ORDER ...
- SQL 递归查询,意淫CTE递归的执行步骤
今天用到了sql的递归查询.递归查询是CTE语句with xx as(....)实现的. 假如表Category数据如下. 我们想查找机枪这个子分类极其层次关系(通过子节点,查询所有层级节点).以下是 ...
- SQL笔记 - CTE递归实例:显示部门全称
昨天在整理JS的Function时,示例是一个递归函数.说起递归,想起前段时间在搞CTE,那个纠结呀,看似容易,可我总抓不住门道,什么递归条件,什么结束条件,一头雾水...今天一大早就爬起来,果然不负 ...
- Sql Server CTE递归
WITH cte AS ( SELECT a.FNUMBER,a.FMATERIALID AS MainId,b.FMATERIALID AS ChileID,CAST(b.FMATERIALID A ...
- CTE递归 MAXRECURSION 遇到的问题
在使用Sql Server的时候,当需要递归的时候很多时候就会想到使用CTE.但是当递归层数比较多,超过了100层,或者是一个递归死循环的时候.执行就会爆递归次数已到,最多100的错误. 当面对第一种 ...
- CTE递归限制次数
CTE可以用来取递归,网上资料很多,这里就不再叙述了,今天遇到的需求是要限制只取2级,然后加了个临时的lev with tree as(select [CustomerID],[CustomerNam ...
- KingbaseES的SQL语句-CTE递归
背景 从上下级关系表中,任意一个节点数据出发,可以获得该节点的上级或下级.CTE的递归语法,或者 connect by 与 start with的 查询语法,能够实现这个需求. 当我们需要制作上下级关 ...
随机推荐
- 【POJ3294】 Life Forms (后缀数组+二分)
Life Forms Description You may have wondered why most extraterrestrial life forms resemble humans, d ...
- Initializing Spring root WebApplicationContext
最近 我部署ssh项目的时候经常出现这样的问题,我的解决办法是 log4j:WARN No appenders could be found for logger (org.springframewo ...
- lc面试准备:Power of Two
1 题目 Given an integer, write a function to determine if it is a power of two. 接口 boolean isPowerOfTw ...
- Mysql、SqlServer和Oracle 添加、修改、删除 字段总结
MySql: 1.添加 添加单列: ALTER TABLE 表名 ADD 列名 数据类型 添加多列: ALTER TABLE 表名 ADD 列名1 数据类型1,Add 列名2 数据类型2 2.修改 修 ...
- Linux os
进程就是处于执行期的程序(目标代码存放在某种存储介质上,如内存).进程不只局限于可执行代码,还包括其他资源:打开的文件,挂起的信号,内核数据结构,内存地址空间以及至少一个执行线程. 进程是出于执行期的 ...
- Android4.0窗口机制和创建过程分析
一 前言 在谈到这个话题的时候,脑海里面千头万绪,因为它涉及到了方方面面的知识… 比如Activity管理,窗口添加,Token权限验证等等… 既然这么复杂,那么我们就复杂的问题简单化,可以分成下面 ...
- jQuery zxxbox弹出框插件(v3.0)
插件地址: http://www.zhangxinxu.com/study/201009/jquery-zxxbox-v3-demo.html
- 【转】git在eclipse中的配置
原文网址:http://www.cnblogs.com/zhxiaomiao/archive/2013/05/16/3081148.html 一_安装EGIT插件 http://download.ec ...
- WIA设备批量扫描
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Linux学习笔记4——函数调用栈空间的分配与释放
一.函数执行时使用栈空间作为自己的临时栈,3种方式决定编译器清空栈的方式:__stdcall. __fastcall.__cdecl 1.__stdcall表示每个调用者负责清空自己调用的函数的临时栈 ...