SQL递归
递归一般出现在树形结构中
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递归的更多相关文章
- SQL 递归
-- 查询指定部门下面的所有部门, 并汇总各部门的下级部门数 ) SET @Dept_name = N'MIS' ;WITH DEPTS AS( -- 查询指定部门及其下的所有子部门 -- 定位点成员 ...
- SQL 递归 可以用于权限查找。迭代自身没有用递归函数。
昨晚看的书,发现可以用T-SQL 实现自定义递归,其实也就是变相的 foreach 直接上代码 ,不懂得可问: ),col int ) -- id 增量id pid该数据的上级增量id name 名称 ...
- Sql递归关联情况,With作为开头条件。
with Test_Recursion(Id,ParentId)AS(select Id,ParentId from [V_KPI_DetailsActivities] where ParentId ...
- SQL 递归找查所有子节点及所有父节
在SQL的树型结构中,很多时候,知道某一节点的值,需要查找该节点的所有子节点(包括多级)的功能,这时就需要用到如下的用户自定义函数. 表结构如下: ID int Dep_Type int Dep_Co ...
- sql 递归树
with CTE as ( -->Begin 一个定位点成员 select ID, PersonName,ParentID,cast(PersonName as nvarchar(max)) a ...
- SQL 递归使用
直接贴代码吧= = WITH CTE AS ( -->Begin 一个定位点成员 SELECT COUNTRYORDERID,HSNAME, COUNTRYNAME,PARENTORDERID, ...
- Mybatis 使用 SQL 递归获取单表中的树结构
xml 代码 <resultMap type="xxx.xxx.xxx.xxx.实体类" id="xxxListTree"> <result ...
- SQL 递归树 子父节点相互查询
if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar( ...
- sql 递归子查询
select (SELECT (Case A1.AreaAbbr WHEN '' THEN A1.AreaName Else A1.AreaAbbr END)+ ' ' FROM AreaLang ...
随机推荐
- input , textarea 边框问题
一.去掉边框: 看看基本的HTML: 复制代码 代码如下: <div class="wrap"> <input type="text" cla ...
- css3 倒影
说起倒影效果,在传统网页中,我们只能使用photoshop进行事先将倒影设计好,然后导入到网页中,这样不但耗费资源,也阻碍了开发的效率.而 css3新增了Reflections板块,css Refl ...
- 【Selenium2+Python】定位
定位Frame driver.switch_to_frame("frameID") 多窗口切换 #获得当前窗口 nowhandle = driver.current_window_ ...
- YII2.0 验证表单
控制器代码 <?php namespace app\modules\pub\controllers; use Yii; use backend\base\BaseController; use ...
- 2、JS中的表达式和运算符
一.表达式 1.原始表达式:2.14,“test”,true/false,null……复合表达式:10*20…… 2.数组.对象的初始化表达式:new Array(1,2),[1,undefined, ...
- Unity3D DllNotFoundException/System.DllNotFoundException
Unity System.DllNotFoundException Unity Fallback handler could not load library D:/91yGame/SparrowCD ...
- “__doPostBack”未定义
项目中发现IE10等高级浏览器报错 ASP.NET无法检测IE10,导致_doPostBack未定义JavaScript错误 为此微软工程师解释如果发布asp2.0 asp4.0发布时,这些浏览器还未 ...
- 黑马程序员——JAVA基础之网络编程
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 网络编程 网络模型:OSI参考模型和TCP/IP参考模型 网络通讯三要素: IP地址:InetA ...
- 是不是content-type: text/html的数据包一到,浏览器就肯定刷新页面?
整理自:http://q.cnblogs.com/q/54726/ 是不是content-type: text/html的数据包一到,浏览器就肯定刷新页面? 或者说,浏览器收到的状态正常的conten ...
- Unity3D外包
北京动点软件长年承接Unity3D(U3D外包)项目,我们制作各类型VR/AR游戏,虚拟现实,增强现实项目! 品质保证,售后完备. 联系请加QQ:372900288 电话:13911652504 我 ...