SQLServer CTE递归和循环

Create table #country (AreaNam NVARCHAR(10),BelongTo Nvarchar(10),Msg varchar(100))

INSERT INTO #country
SELECT ‘中国‘,‘中国‘,null union all
SELECT ‘江苏‘,‘中国‘,null union all
SELECT ‘南京‘,‘江苏‘,null union all
SELECT ‘无锡‘,‘江苏‘,null union all
SELECT ‘徐州‘,‘江苏‘,null union all
SELECT ‘扬州‘,‘江苏‘,null union all
SELECT ‘苏州‘,‘江苏‘,null union all
SELECT ‘六合区‘,‘南京‘,null union all
SELECT ‘江宁区‘,‘南京‘,null union all
SELECT ‘浦口区‘,‘南京‘,null union all
SELECT ‘仙林区‘,‘南京‘,null union all
SELECT ‘建邺区‘,‘南京‘,null union all
SELECT ‘宝应‘,‘扬州‘,null union all
SELECT ‘仪征‘,‘扬州‘,null union all
SELECT ‘小官庄‘,‘宝应‘,null union all
SELECT ‘范水‘,‘宝应‘,null union all
SELECT ‘鲁垛‘,‘宝应‘,null union all
SELECT ‘安宜‘,‘宝应‘,null union all
SELECT ‘组全‘,‘小官庄‘,null union all
SELECT ‘房桥‘,‘小官庄‘,null union all
SELECT ‘直下沟‘,‘小官庄‘,null union all
SELECT ‘山东‘,‘中国‘,null union all
SELECT ‘济南‘,‘山东‘,null union all
SELECT ‘青岛‘,‘山东‘,null union all
SELECT ‘淄博‘,‘山东‘,null union all
SELECT ‘烟台‘,‘山东‘,null union all
SELECT ‘张店‘,‘淄博‘,null union all
SELECT ‘博山‘,‘淄博‘,null union all
SELECT ‘淄川‘,‘淄博‘,null union all
SELECT ‘龙王山‘,‘浦口区‘,null union all
SELECT ‘高新区‘,‘浦口区‘,null union all
SELECT ‘陆军指挥学院‘,‘浦口区‘,null union all
SELECT ‘南京信息工程大学‘,‘浦口区‘,null union all
SELECT ‘金陵学院‘,‘浦口区‘,null

用CTE递归的方式去实现我们所想要的结果,SQL如下:

WITH CTE AS (
SELECT AreaNam,BelongTo,Msg FROM #country WHERE AreaNam=‘南京‘
UNION ALL
SELECT A.AreaNam,A.BelongTo,A.Msg FROM #country A INNER JOIN CTE B ON A.BelongTo=B.AreaNam
)
SELECT * FROM CTE

AreaNam BelongTo Msg
南京 江苏 NULL
六合区 南京 NULL
江宁区 南京 NULL
浦口区 南京 NULL
仙林区 南京 NULL
建邺区 南京 NULL
龙王山 浦口区 NULL
高新区 浦口区 NULL
陆军指挥学院 浦口区 NULL
南京信息工程大学 浦口区 NULL
金陵学院 浦口区 NULL

原文地址:https://www.cnblogs.com/nfqd/p/9998077.html

时间: 2024-07-30 03:30:52

SQLServer CTE递归和循环的相关文章

递归与循环

如果我们需要重复多次计算相同的问题,通常可以选择递归或者循环 递归的好处是代码简洁 但是递归也有明显的缺点: 递归是由于函数调用自身,而函数调用是需要有时间和空间的消耗的.每一函数调用,都需要在内存栈中分配空间以保存参数,返回地址和临时变量,而且往栈中压入数据和弹出数据都需要时间. 递归中有可能很多计算都是重复的.递归的本质是把一个大问题分解成小问题,但是多个小问题之间会有重叠的部分 递归可能会引发问题:调用栈溢出. 斐波拉契数列 public class Exam9_Fibonacci { p

8第八章CTE递归及分组汇总高级部分(多维数据集)(转载)

8第八章CTE递归及分组汇总高级部分(多维数据集) 这里贴图太麻烦...算了 UNION 等集合操作符: UNION 等以第一个 SELECT  的 列明 作为 整个结果集的列明,整个结果集 唯一认可的 唯一逻辑处理阶段 是 ORDER BY 这个意思是说 只有 ORDER BY 是对整个结果集作用的,其它都操作都作用在 UINON 两侧的 子集合中. EXCEPT 操作符也是 提出了重复值的 此外,它认为两个 null 值是相等的, 而 NOT EXISTS 认为两个 null 值不相等, 集

关于递归和循环

一. 递归的慢究竟慢在哪 递归就是函数自己调用自己,函数每次调用的时候需要将以下内容存入递归栈:调用函数地址.形参.局部变量.返回值.所以如果递归调用了N次,那压栈操作要保存N * 调用函数地址.N * 局部变量.N * 形参.N * 返回值.这势必是影响效率的. 二. 递归和循环的比较: 递归和循环是两种不同的解决问题的思路,我们不能片面的说循环的效率一定会比递归高,下面我们做简单的分析: 1. 递归: 优点:代码简洁,清晰 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额

迭代、递归替代循环

循环(迭代)与递归的区别 1. 递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法. 当然,从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的. 但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结构的引申本身属于递归的概念,用迭代的方法在设计初期根本无法实现,这就像动多态的东西并不总是可以用静多态的方法实现一样.这也是为什么在结构设计时,通常采用递

黑马程序员----java基础---递归概述、递归和循环的区别

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.递归函数,通俗的说就是函数本身自己调用自己... 如:n!=n(n-1)! 你定义函数f(n)=nf(n-1) 而f(n-1)又是这个定义的函数..这就是递归 定义:程序调用自身的编程技巧称为递归( recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小

15.输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4260432.html  声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元查找树,将该树转换为它的镜像, 即在转换后的二元查找树中,左子树的结点都大于右子树的结点, 用递归和循环两种方法完成树的镜像转换. 题目分析:

sqlserver向上递归统计

数据字典如下 只有,其中的'xx'表示'from',因为oschina不给输入关键字 kmcode,kmname,pidkm 101 ,税收收入, 0 10103 ,营业税,101 1010304,一般营业税,10103 10106, 个人所得税,101 1010601,个人所得税,10106 101060109,其他个人所得税,1010601 有一张表可以统计出 select * xx ps where swdjh='某值' 结果如下 公司名称,科目代码,金额 aaaa, 101060109,

递归与循环的区别

递归与循环是两种不同的解决问题的典型思路. 递归算法: 优点:代码简洁.清晰,并且容易验证正确性.(如果你真的理解了算法的话,否则你更晕) 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响.但是,对于某些问题,如果不使用递归,那将是极端难看的代码. 循环算法: 优点:速度快,结构简单. 缺点:并不能解决所有的问题.有的问题适合使用递归而不是循环.如果使用循环并不困难的话,最好使用循环. 递归算法 和循环算法总结

SQL CTE 递归 查询省,市,区

IF OBJECT_ID('tb') IS NOT NULL DROP TABLE tb create table tb(id varchar(3) , pid varchar(3) , name varchar(10)) insert into tb values('001' , null , '广东省') insert into tb values('002' , '001' , '广州市') insert into tb values('003' , '001' , '深圳市') inse