递归一般出现在树形结构中

1:根据孩子节点查找所有父节点

With T
As
(
Select * From U_Companies TB Where CompanyID=80047
Union All
Select TB.* From U_Companies TB Inner Join T on TB.CompanyID=T.ParentID
)
Select * From T

  

2:根据父亲查找所有子节点

With T
As
(
Select * From U_Companies TB Where CompanyID=80047
Union All
Select TB.* From U_Companies TB Inner Join T on TB.ParentID=T.CompanyID
)
Select * From T

如果CompanyID多个

declare @CompanyRange varchar(1000)=''
set @CompanyRange='80084,80085' ;With T
As
(
SELECT TB.* FROM
(
SELECT T1.* From
U_Companies T1
INNER JOIN
(SELECT F1 AS CompanyID FROM dbo.SplitStrToTable(@CompanyRange,',')) T2
ON T1.CompanyID=T2.CompanyID
) TB
Union All
Select TB.*
From U_Companies TB Inner Join T on TB.ParentID=T.CompanyID
)
Select * From T ORDER BY CompanyID;

  

SplitStrToTable函数代码:
ALTER   function   [dbo].[SplitStrToTable]
(
@SourceSql VARCHAR(8000),
@StrSeprate VARCHAR(100))
RETURNS @temp TABLE(F1 VARCHAR(100)
)
AS
BEGIN
DECLARE @ch AS VARCHAR(100)
SET @SourceSql=@SourceSql+@StrSeprate
WHILE(@SourceSql<>'')
BEGIN
SET @ch=left(@SourceSql,CHARINDEX(',',@SourceSql,1)-1)
INSERT @temp VALUES(@ch)
SET @SourceSql=stuff(@SourceSql,1,charindex(',',@SourceSql,1),'')
END
RETURN
END

  

SQL递归的更多相关文章

  1. SQL 递归

    -- 查询指定部门下面的所有部门, 并汇总各部门的下级部门数 ) SET @Dept_name = N'MIS' ;WITH DEPTS AS( -- 查询指定部门及其下的所有子部门 -- 定位点成员 ...

  2. SQL 递归 可以用于权限查找。迭代自身没有用递归函数。

    昨晚看的书,发现可以用T-SQL 实现自定义递归,其实也就是变相的 foreach 直接上代码 ,不懂得可问: ),col int ) -- id 增量id pid该数据的上级增量id name 名称 ...

  3. Sql递归关联情况,With作为开头条件。

    with Test_Recursion(Id,ParentId)AS(select Id,ParentId  from [V_KPI_DetailsActivities] where ParentId ...

  4. SQL 递归找查所有子节点及所有父节

    在SQL的树型结构中,很多时候,知道某一节点的值,需要查找该节点的所有子节点(包括多级)的功能,这时就需要用到如下的用户自定义函数. 表结构如下: ID int Dep_Type int Dep_Co ...

  5. sql 递归树

    with CTE as ( -->Begin 一个定位点成员 select ID, PersonName,ParentID,cast(PersonName as nvarchar(max)) a ...

  6. SQL 递归使用

    直接贴代码吧= = WITH CTE AS ( -->Begin 一个定位点成员 SELECT COUNTRYORDERID,HSNAME, COUNTRYNAME,PARENTORDERID, ...

  7. Mybatis 使用 SQL 递归获取单表中的树结构

    xml 代码 <resultMap type="xxx.xxx.xxx.xxx.实体类" id="xxxListTree"> <result ...

  8. SQL 递归树 子父节点相互查询

    if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...

  9. sql 递归子查询

    select (SELECT (Case A1.AreaAbbr WHEN '' THEN A1.AreaName Else A1.AreaAbbr  END)+ ' ' FROM AreaLang ...

随机推荐

  1. 点击含下拉菜单的列表/表单按钮:通过JS创建虚拟按钮并点击

    ${JsCode} | Get Element Attribute | XPATH=//table[@class='mnubar']//tr//td//span[text()='${MenuArr[0 ...

  2. exec函数族,守护进程,线程同步和互斥

    2015.3.2 进程和程序有三点不同:1,存在位置不同,程序:硬盘,磁盘.进程:内存2. 程序是静态的,进程是动态的 执行./a.out -->bash->bash程序调用fork()- ...

  3. framework各版本对比

    本对比只是粗略的让大家了解到大概有什么变化 .net 1.0 2002年2月.net 2.0 2006年1月.net 3.0 2006年11月 .net 3.5 2007年11月.net 3.5 sp ...

  4. 来自HeroKu的HTTP API 设计指南(中文版)

    原文转自:http://get.jobdeer.com/343.get 来自HeroKu的HTTP API 设计指南(中文版) 翻译 by @Easy 简介 本指南中文翻译者为 @Easy ,他是国内 ...

  5. Appium 解决不能输入中文字符问题

    只需在初始化driver方法时,写这两行代码即可:   capabilities.setCapability("unicodeKeyboard", "True" ...

  6. SQLite手工注入方法小结

    SQLite 官网下载:www.sqlite.org/download.html sqlite管理工具:http://www.yunqa.de/delphi/products/sqlitespy/in ...

  7. HTTP请求中的form data和request payload的区别

    HTML <form> 标签的 enctype 属性 在下面的例子中,表单数据会在未编码的情况下进行发送: <form action="form_action.asp&qu ...

  8. C# 托管资源与非托管资源

    在.net 编程环境中,系统的资源分为托管资源和非托管资源. 托管资源: Net平台中,CLR为程序员提供了一种很好的内存管理机制,使得程序员在编写代码时不要显式的去释放自己使用的内存资源(这些在先前 ...

  9. jquery选择器之内容选择器

    HTML示例代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  10. Emmet 真是个好东西

    他的官网:http://docs.emmet.io/ 给广大程序员节省时间 #page>div.logo+ul#navigation>li*5>a{Item $}生产 <div ...