TSQL--使用CTE完成递归查询】的更多相关文章

Select字句在逻辑上是SQL语句最后进行处理的最后一步,所以,以下查询会发生错误: SELECT YEAR(OrderDate) AS OrderYear, COUNT(DISTINCT CustomerID) AS NumCusts FROM dbo.Orders GROUP BY OrderYear; 因为group by是在Select之前进行的,那个时候orderYear这个列并没有形成. 如果要查询成功,可以像下面进行修改: SELECT OrderYear, COUNT(DIST…
--递归查询 IF OBJECT_ID('DiGui','U') IS NOT NULL DROP TABLE DiGui CREATE TABLE DiGui( Id ), ParentId ) ) INSERT INTO dbo.DiGui( Id, ParentId ) select '第三层','第一层' union select '第二层','第一层' union select '第四层','第一层' union select '第十层','第二层' union select '第九层…
CREATE TABLE TB001( CategoryId INT PRIMARY KEY, ParentCategoryId INT, CategoryName NVARCHAR(200))GO WITH TAS( SELECT T1.CategoryId, T1.CategoryName, T1.ParentCategoryId,  0 AS CategoryLevel FROM TB001 AS T1 WHERE T1.ParentCategoryId IS NULL UNION ALL…
使用CTE进行递归查询,能够实现对层次结构的数据的快速访问,非常有用. TSql CTE 递归原理探究 TSql 分层和递归查询 1,CTE的递归结构 递归查询的结构包括两部分:起始点和迭代公式. 使用CTE递归,其迭代终止条件是达到max_recursive指定的递归次数,或递归公式返回的结果集是empty,(即递归公式没有返回任何结果). 创建测试数据:ManagerID是UserID的父节点,这是一个非常简单的层次结构模型. use tempdb go create table dbo.d…
CTE是如何进行递归的?产生递归的条件有三个,分别是 初始值 自身调用自身 结束递归的条件 1,示例代码 ;with cte as ( as jd union all as jd from cte ) select * from cte 查询结果如下 2,递归过程分析 2.1 初始值 select 1 as id, 1 as jd 提供初始值,CTE中的值只有这一个. 2.2 第一次递归调用 select id +1 as id ,jd+2 as jdfrom ctewhere id<10 在第…
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH cte_name (…
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH cte_name (…
在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH cte_name (…
TSQL脚本能实现递归查询,用户使用共用表表达式 CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询.本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 递归调用是指自己调用自己,使用CTE实现递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH…
一.CTE递归查询简介 --CTE递归查询终止条件在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path).一,递归查询原理CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的…
来自:<Microsoft SQL Server 2008技术内幕:T-SQL语言基础> 一.公共表表达式(CTE,Common Table Expression)是在SQL Server 2005中引入的,是ANSI SQL标准的一部分. CTE是用WITH定义的,它的一般格式为: WITH <CTE_名称>[(目标列_列表)] WITH <CTE_Name>[(target_column_list)] AS  AS ( ( <定义CTE的内部查询> &l…
一.前言 现在做项目数据访问基本都会选择一种orm框架,它以面向对象的形式屏蔽底层的数据访问形式,让开发人员更集中在业务处理上,而不是和数据库的交互上,帮助我们提高开发效率:例如一些简单的insert.update,我们不需要写insert into...sql 语句,而是直接new一个实体对象,然后db.Insert(entity),看起来是那么清爽:像EF这样比较完善的orm,支持linq语法对数据库进行访问,写起来就更加爽了,有些人甚至认为开发人员可以不用会写sql语句了...但现实不会让…
WITH TEMP ([ID], [PARENTID]) AS (SELECT UNIQUEID ,PID FROM [DBO].TB_DEPTINFO D WHERE PID = @ParentId UNION ALL SELECT UNIQUEID ,PID FROM [DBO].TB_DEPTINFO I INNER JOIN TEMP ON I.PID = TEMP.[ID]) SELECT * FROM TEMP…
SQL SERVER 2005之前的版本只能用函数方法实现,SQL SERVER 2005之后新增了CTE功能,可以利用CTE实现递归查询: CTE:公用表达式Common Table Expression 是SQL SERVER 2005版本之后引入的一个特性: #填充测试数据 1.sql ),[ParentGroupId] int) Insert GroupInfo ,'某某大学',null union all , union all , union all , union all , un…
1.CTE的通用形式 WITH temp_name as ( CTE查询结果集 ) 释义: (1)with/as :关键字 (2)temp_name:为CTE临时使用名称,可以看初学者做是一个临时表 (3)():查询结果集主体 2.CTE的递归查询 介绍:其实CTE最强大的地方就是在于其递归查询 举例1:使用CTE递归获取某年的1-12月份 --获取2018年的1-12月份(可以用来做外连接和分组) ;with date_test as ( select cast('20180101 00:00…
关键字:SQL,CTE,递归查询 概述:通常递归查询是一个有难度的话题,尽管如此,它们仍使您能够完成在 SQL 中无法实现的操作.本文通过示例进行了简单介绍,并展示了与 PL/SQL的递归查询实现的差异. 一.公用表表达式(WITH子句) 公用表表达式(CTE)可以被看作是一个视图,只适用于一个单一的查询: WITH ctename AS ( SELECT ... ) SELECT ... FROM ctename ... 这也可以写成子查询,但使用 CTE 有一些优点: 查询变得更具可读性.…
2018-02-07 20:41:39 一.DBMS的用户接口 查询语言 访问DBMS的访问工具(GUI) API 相关类库 二.SQL语言 SQL语言可以细分为四种: 1.Data Definition Language (DDL):用来定义,删除或者修改数据模式: 2.Query Language (QL):查询语言 3.Data Manipulation Language (DML):对数据进行插删改操作 4.Data Control Language (DCL):对权限的设置 SQL语言…
  ------over的两种常用的用法--- --第一种分组 当然要注意了,这里的分组并不是实际的分组,而是根据你的业务需求而坐的临时分组   select roomguid,Room, avg(total) over(partition by bldGUID) as 楼栋均价, AVG(total) over(partition by ProjGUID) as 项目均价 from p_room   --产生行号 用来产生行号的时候,over()一定要order by select ROW_N…
摘自: http://blog.csdn.net/bluefoxev/article/details/6779794 ------- SQL2005 方法 一.WITH AS的含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分.特别对于UNION ALL比较有用.因为UNIO…
感觉这个CTE递归查询蛮好用的,先举个例子: use City; go create table Tree ( ID int identity(1,1) primary key not null, Name varchar(20) not null, Parent varchar(20) null ) go insert Tree values('大学',null) insert Tree values('学院','大学') insert Tree values('计算机学院','学院') in…
引言 表表达式是一种命名的查询表达式,代表一个有效的关系表.MSSQL支持4种类型的表表达式,它们分别是:派生表.公用表表达式(CTE).视图以及内联表值函数.表表达式并不是物理上真实存在的对象,它们是虚拟的.对于表表达式的查询在数据库引擎内部都会转化为底层对象的查询.使用表表达式通常是体现在代码的逻辑方面,而不是性能方面.下面就让我妈来详细介绍每一种类型吧. 派生表 派生表也叫表子查询是在外部查询的FROM子句中定义的.派生表的存在范围是定义它的外部查询,只要外部查询一结束,派生表也就不存在了…
1.公用表表达式(CTE)的定义 公用表达式的定义包含三部分: 公用表表达式的名字(在WITH之后) 所涉及的列名(可选) 一个SELECT语句(紧跟AS之后), 公用表表达式的好处之一是可以在接下来一条语句中多长引用,记得是接下来一条语句 在MSDN中的原型: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) 2.非递归公用表表达式(CTE) 非递归的CTE引用与普通Select查询没有太实…
with cte as ( select Id,Pid,DeptName,0 as lvl from Department where Id = 2 union all select d.Id,d.Pid,d.DeptName,lvl+1 from cte c inner join Department d on c.Id = d.Pid ) select * from cte 表结构 Id Pid DeptName ----------- ----------- ---------------…
公用表表达式(CTE) 在编写T-SQL代码时,往往需要临时存储某些结果集.前面我们已经广泛使用和介绍了两种临时存储结果集的方法:临时表和表变量.除此之外,还可以使用公用表表达式的方法.公用表表达式(Common Table Expression)是SQL Server2005版本的引入的一个特性.CTE可以看组是一个临时的结果集,可以再接下来来的一个SELECT,INSERT,UPDATE,DELETE,MERGE语句中多次引用.使用公用表达式CTE可以让语句更加清晰简练.与公用表达式作用类似…
简介 对于SELECT查询语句来说,通常情况下,为了使T-SQL代码更加简洁和可读,在一个查询中引用另外的结果集都是通过视图而不是子查询来进行分解的. 但是,视图是作为系统对象存在数据库中,那对于结果集仅仅需要在存储过程或是用户自定义函数中使用一次的时候,使用视图就显得有些奢侈了. 公用表表达式(Common Table Expression)是SQL SERVER 2005版本之后引入的一个特性.CTE可以看作是一个临时的结果集,可以在接下来的一个 SELECT,INSERT,UPDATE,D…
在做数据库设计这块,很多时候表的数据模型就是典型的二叉树结构. 于是在查询数据的时候,就涉及到了数据的递归查询. 递归查询分为两种:1.从根节点查询自身以及所有的子节点:2.从子节点查询自身以及所有的父节点. 下面分别以Oracle 11g 数据库和MsSql 2008 数据库为例,来实现上述两种类型的递归查询 先建一张表 表名: TAdministrative  字段名称  说明  AdministrativeID  行政编号  AdministrativePID  当前行政级别的上一行政级别…
T-Sql 递归查询(给定节点查所有父节点.所有子节点的方法)   -- 查找所有父节点with tab as( select Type_Id,ParentId,Type_Name from Sys_ParamType_V2_0 where Type_Id=316--子节点 union all select b.Type_Id,b.ParentId,b.Type_Name  from  tab a,--子节点数据集  Sys_ParamType_V2_0 b  --父节点数据集 where a.…
ROW_NUMBER() OVER()函数用法 with CTE as     (      -->Begin 一个定位点成员       select ID, Name,Parent,cast(Name as nvarchar(max)) as TE,           ROW_NUMBER()over(order by getdate()) as OrderID           --最关键是上面这个字段,要获取排序字段,按字符串来排序.           --其中窗口函数必须要使用o…
--关于使用CTE(公用表表达式)的递归查询 --CTE 的基本语法结构如下: WITH expression_name [ ( column_name [,...n] ) ] AS ( CTE_query_definition ) --只有在查询定义中为所有结果列都提供了不同的名称时,列名称列表才是可选的. --运行 CTE 的语句为: SELECT <column_list> FROM expression_name; --CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE…
最近研究了一下CTE递归查询,感觉这个CTE递归查询蛮好用的,在网上找到了一个比较好的例子,测试例子如下 use City; go create table Tree ( ID ,) primary key not null, Name ) not null, Parent ) null ) go insert Tree values('大学',null) insert Tree values('学院','大学') insert Tree values('计算机学院','学院') insert…