Sql Server CTE递归

WITH cte AS (
SELECT a.FNUMBER,a.FMATERIALID AS MainId,b.FMATERIALID AS ChileID,CAST(b.FMATERIALID AS VARCHAR(max)) AS lev FROM t_eng_bom a
JOIN dbo.T_ENG_BOMCHILD b ON a.fid =b.FID
WHERE a.fid = ‘100150‘
UNION ALL
SELECT d.FNUMBER,d.MainId,d.ChileID,CAST(lev AS VARCHAR(max))+ CAST(d.ChileID AS VARCHAR(max)) AS lev FROM cte c
JOIN ( SELECT aa.FNUMBER,aa.FMATERIALID AS MainId,bbb.FMATERIALID AS ChileID FROM t_eng_bom aa
JOIN dbo.T_ENG_BOMCHILD bbb ON aa.fid =bbb.FID )d ON c.ChileID = d.MainId
)
SELECT * FROM cte ORDER BY lev

WITH cte as(

select a,b,c from tablea

union all

select a,b,c from cte a

join tablea b on a.a = b.b

)

select * from cte

语法:

[WITH[,n]]
  ::=
  expression_name[(column_name[,n])]
  AS(
  CTE_query_definition1 -- 定位点成员(也就是初始值或第一个结果集)
  unionall
  CTE_query_definition2 -- 递归成员
  )

最后传送门:http://blog.csdn.net/bin_520_yan/article/details/5998349#reply

时间: 2024-11-10 06:53:16

Sql Server CTE递归的相关文章

sql server CTE递归使用测试

--CTE递归查询 if(object_id(N'menu') > 0) drop table menu CREATE TABLE MENU ( name nvarchar(50) NOT NULL PRIMARY KEY, senior nvarchar(50) NULL ); INSERT INTO MENU values ('文件',NULL), ('新建','文件'), ('项目','新建'), ('项目11111','项目'), ('项目22222','项目'), ('项目33333'

在SQL Server 实现递归

--在SQL Server 中其实提供了CTE[公共表表达式]来实现递归: Declare @Id Int Set @Id = 24;    ---在此修改父节点 With RootNodeCTE(Id,ParentId) As ( Select Id,ParentId From Dept Where ParentId In (@Id) Union All Select Dept.Id,Dept.ParentId From RootNodeCTE Inner Join Dept On RootN

SQL Server CTE 递归查询全解

在TSQL脚本中,也能实现递归查询,SQL Server提供CTE(Common Table Expression),只需要编写少量的代码,就能实现递归查询,本文详细介绍CTE递归调用的特性和使用示例,递归查询主要用于层次结构的查询,从叶级(Leaf Level)向顶层(Root Level)查询,或从顶层向叶级查询,或递归的路径(Path). 一,递归查询原理 CTE的递归查询必须满足三个条件:初始条件,递归调用表达式,终止条件,CTE 递归查询的伪代码如下: WITH cte_name (

SQL Server使用递归查询数据

功能描述:有两张表,一张业务部门表A(A表中存某公司的所有业务部门信息),另一张表为用户表B(B表中存某公司所有用户所在的业务部门信息),要求使用SQL语句查询出各个部门的用户数量(注意:统计各业务部门的用户数量时,需要将其下所有子部门的用户统计进去): 表A: 表B:     方法描述: 使用SQL Server的递归方式: 1.先联合两张表查询数据,并将查询出的结果存放在临时表中: 2.使用cte方法从临时表中查询数据: 具体的SQL脚本如下: select B.用户名, B.业务部门, A

SQL Server中公用表表达式(CTE)递归的生成帮助数据

本文出处:http://www.cnblogs.com/wy123/p/5960825.html 我们在做开发的时候,有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连续的季度日期等等常见很多人利用master库的spt_values系统表,这个当然没有问题 比如下面这个(没截完,结果是0-2047) 这样也可以使用,但是感觉不够灵活,一是不是随便一个账号都可以访问master数据库的,而是他这里面也只有这么一个连续的数字了,想要别的结果集就不太弄了,类似数据可以用公用表表达式C

sql server 公共表达式(CTE)的简单应用

现在做项目数据访问基本都会选择一种orm框架,它以面向对象的形式屏蔽底层的数据访问形式,让开发人员更集中在业务处理上,而不是和数据库的交互上,帮助我们提高开发效率:例如一些简单的insert.update,我们不需要写insert into...sql 语句,而是直接new一个实体对象,然后db.Insert(entity),看起来是那么清爽:像EF这样比较完善的orm,支持linq语法对数据库进行访问,写起来就更加爽了,有些人甚至认为开发人员可以不用会写sql语句了...但现实不会让你工作得那

sql server中的cte

从SQL Server 2005开始,提供了CTE(Common Table Expression,公用表表达式)的语法支持. CTE是定义在SELECT.INSERT.UPDATE或DELETE语句中的临时命名的结果集,同时CTE也可以用在视图的定义中. 在CTE中可以包括对自身的引用,因此这种表达式也被称为递归CTE. CTE的优点 公用表表达式提供的功能其实和视图差不多,但是它不像视图一样把SQL语句保存在我们的数据库里面. 微软官方给出的使用CTE的优势: 1.可以编写一个递归查询. 2

Atitit.mysql oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server..

Atitit.mysql  oracle with as模式临时表模式 CTE 语句的使用,减少子查询的结构性 mssql sql server.. 1. with ... as (...) 在mysql中应该如何表示 1 2. 子查询和查询嵌套主要是便于可读性提升上, 2 3. MYSQL中的解决之道::临时表. 2 4. Seo黑头关键字替换链接的统计样品 2 4.1. //---------查询com网站的数量 2 4.2. //----------------------查询net网站的

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