Sql Server递归查询(转)

有如下数据表

假如我们要查询ID为003的数据的所有子节点我们可以使用CTE 递归查询完成...

[sql] view plaincopyprint?

  1. if OBJECT_ID(‘tb‘,‘N‘) is not null
  2. drop table tb;
  3. create table tb(id varchar(3) , pid varchar(3) , name varchar(10));
  4. insert into tb values(‘001‘ , null , ‘广东省‘);
  5. insert into tb values(‘002‘ , ‘001‘ , ‘广州市‘);
  6. insert into tb values(‘003‘ , ‘001‘ , ‘深圳市‘) ;
  7. insert into tb values(‘004‘ , ‘002‘ , ‘天河区‘) ;
  8. insert into tb values(‘005‘ , ‘003‘ , ‘罗湖区‘);
  9. insert into tb values(‘006‘ , ‘003‘ , ‘福田区‘) ;
  10. insert into tb values(‘007‘ , ‘003‘ , ‘宝安区‘) ;
  11. insert into tb values(‘008‘ , ‘007‘ , ‘西乡镇‘) ;
  12. insert into tb values(‘009‘ , ‘007‘ , ‘龙华镇‘);
  13. insert into tb values(‘010‘ , ‘007‘ , ‘松岗镇‘);
  14. select * from tb;
  15. with cte as
  16. (
  17. select a.id,a.name,a.pid from tb a where id=‘003‘
  18. union all
  19. select k.id,k.name,k.pid  from tb k inner join cte c on c.id = k.pid
  20. )select * from cte

查询结果如下:
003 深圳市 001
005 罗湖区 003
006 福田区 003
007 宝安区 003
008 西乡镇 007
009 龙华镇 007
010 松岗镇 007

转自:http://blog.csdn.net/myxx520/article/details/6922682

时间: 2024-10-27 20:02:31

Sql Server递归查询(转)的相关文章

MS SQL Server递归查询

刚才在论坛上看到网友一个要求.参考如下,Insus.NET分析一下,可以使用MS SQL Server的递归查询,得到结果. 准备一张表: 根据网友提供的数据,填充此表: 下面语法在SQL Server 2014之下运行正常: 上面代码示例中,完整SQL代码: WITH TempDeptment ([ID],[PID],[DeptName],[Conjunction]) AS ( SELECT [ID],[PID],[DeptName], CAST([DeptName] AS Nvarchar(

【Sql Server】SQL SERVER 递归查询

SQL SERVER 2005之前的版本只能用函数方法实现,SQL SERVER 2005之后新增了CTE功能,可以利用CTE实现递归查询: CTE:公用表达式Common Table Expression 是SQL SERVER 2005版本之后引入的一个特性: #填充测试数据 1.sql 1 Create table GroupInfo1([Id] int,[GroupName] nvarchar(50),[ParentGroupId] int) 2 3 Insert GroupInfo1

SQL SERVER 递归查询

查找所有父结点: WITH    CTE_Area AS ( SELECT   * FROM     Common.Area WHERE    AreaCode = '30A' UNION ALL SELECT   b.* FROM     CTE_Area a, Common.Area b WHERE    a.ParentCode = b.AreaCode ) SELECT  * FROM    CTE_Area; 查找所有子结点: WITH    CTE_Area AS ( SELECT

SQL Server 2005递归查询

? 1 2 3 4 5 6 7 WHIT XXX(列1,列2....) AS (     SELECT 列1,列2... FROM 表WHERE ID=xxxxxx     UNION ALL     SELECT 列1,列2.... FROM 表 WHERE ID = XXX.ParentID ) SELECT     列1,列2.... FROM XXX SQL Server 2005递归查询,布布扣,bubuko.com

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规范

常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自增长标识建议采用bigint数据类型   (数据量一大,用int类型就装不下,那以后改造就麻烦了) 5.时间类型建议采用为datetime数据类型 6.禁止使用text.ntext.image老的数据类型 7.禁止使用xml数据类型.varchar(max).nvarchar(max) 约束与索引 每张表必须有主键 •每张表必

一个有趣的SQL Server 层级汇总数据问题

看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题. 具体的问题如下: parent_id emp_id emp_name total_amout     NULL 2 Andrew 200     2 1 Nancy 100     2 3 Janet 120     3 4 Michael 80     1 5 Robert 50     每个员工的总销售额=自己的销售额+其下级员工的总销售额,     比如:     Andrew = 200_

常用 SQL Server 规范集锦

常见的字段类型选择 1.字符类型建议采用varchar/nvarchar数据类型 2.金额货币建议采用money数据类型 3.科学计数建议采用numeric数据类型 4.自增长标识建议采用bigint数据类型   (数据量一大,用int类型就装不下,那以后改造就麻烦了) 5.时间类型建议采用为datetime数据类型 6.禁止使用text.ntext.image老的数据类型 7.禁止使用xml数据类型.varchar(max).nvarchar(max) 约束与索引 每张表必须有主键 每张表必须