sql with as 递归的实现(树形结构)

WITH AS短语,也叫做子查询部分(subquery factoring),定义一个sql 片段,改sql 片段会被整个sql语句用到。其中最实用的功能就是数据的递归,递归的原理:递归包括至少两个查询,一个查询作为递归的基点也就是起点,另一个查询作为递归的成员。

 

一、定义一个公司(company)表 ,总公司下面包含子公司,子公司下面又包含分办事处

CREATE TABLE [dbo].[Company](
    [id] [nvarchar](50) NOT NULL,  //Id 主键
    [companyName] [nvarchar](50) NULL, //公司名称
    [pId] [nvarchar](50) NULL //父节点id
) ON [PRIMARY]

二、 插入数据到公司表

insert into Company(id,companyName,pid)values('A','A总公司','/') //总公司

insert into Company(id,companyName,pid)values('B','B分公司01','A') //分公司
insert into Company(id,companyName,pid)values('C','C分公司02','A') //分公司

insert into Company(id,companyName,pid)values('B1','B办事处','B')  //办事处
insert into Company(id,companyName,pid)values('B2','B办事处','B')  //办事处
insert into Company(id,companyName,pid)values('B3','B办事处','B')  //办事处


insert into Company(id,companyName,pid)values('C1','C办事处','C')  //办事处
insert into Company(id,companyName,pid)values('C2','C办事处','C')  //办事处
insert into Company(id,companyName,pid)values('C3','C办事处','C')  //办事处


你可能感兴趣的:(sqlServer)