SQL 递归使用

直接贴代码吧= =

WITH CTE AS
  (
  -->Begin 一个定位点成员
   SELECT COUNTRYORDERID,HSNAME, COUNTRYNAME,PARENTORDERID,
   IMPORTCURRENTSUMAMOUNT,
   IMPORTCONTRASTSUMAMOUNTPERCENTAGE,
   IMPORTCURRENTSUMAMOUNTPERCENTAGE,
   CAST(COUNTRYNAME AS NVARCHAR(max)) AS TE,0 AS Levle FROM #TempTableDetail
    WHERE PARENTORDERID IS NULL AND HSNAME IN (SELECT HSNAME FROM #TempTableData)
  -->End
  UNION ALL
  -->Begin一个递归成员
   SELECT #TempTableDetail.COUNTRYORDERID, #TempTableDetail.HSNAME, #TempTableDetail.COUNTRYNAME,#TempTableDetail.PARENTORDERID,
   #TempTableDetail.IMPORTCURRENTSUMAMOUNT,
   #TempTableDetail.IMPORTCONTRASTSUMAMOUNTPERCENTAGE,
   #TempTableDetail.IMPORTCURRENTSUMAMOUNTPERCENTAGE,
   CAST(REPLICATE(‘  ‘,LEN(CTE.TE))+#TempTableDetail.COUNTRYNAME AS NVARCHAR(MAX)) AS TE,Levle+1 AS Levle
    FROM #TempTableDetail INNER JOIN CTE
    ON #TempTableDetail.PARENTORDERID=CTE.COUNTRYORDERID
    --group by #TempTableDetail.HSNAME
    WHERE #TempTableDetail.HSNAME IN (SELECT HSNAME FROM #TempTableData)
  -->End
  )

  INSERT INTO #TempResult(COUNTRYORDERID,HSNAME,COUNTRYNAME,IMPORTCONTRASTSUMAMOUNTPERCENTAGE,IMPORTCURRENTSUMAMOUNTPERCENTAGE,IMPORTCURRENTSUMAMOUNT)
  SELECT DISTINCT COUNTRYORDERID, HSNAME,TE,IMPORTCONTRASTSUMAMOUNTPERCENTAGE,
   IMPORTCURRENTSUMAMOUNTPERCENTAGE,IMPORTCURRENTSUMAMOUNT FROM CTE ORDER BY HSNAME,COUNTRYORDERID;

效果:

时间: 2024-08-14 08:37:48

SQL 递归使用的相关文章

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

在SQL的树型结构中,很多时候,知道某一节点的值,需要查找该节点的所有子节点(包括多级)的功能,这时就需要用到如下的用户自定义函数. 表结构如下: ID int Dep_Type int Dep_Code varchar(50) Dep_Name varchar(50) Dep_Dian int Dep_FathID int Dep_Opera varchar(50) Dep_Status int Dep_AddTime datetime 用户自定义函数如下: create function f

sql 递归

sql server: 递归求级别level with directreports as ( --定位点成员定义 select managerid,employeeid,0 as level from employees where managerid is null union all --递归成员定义 select e.managerid,e.employeeid,d.level+1 from employees as e inner join directreports as d on e

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

with Test_Recursion(Id,ParentId)AS(select Id,ParentId  from [V_KPI_DetailsActivities] where ParentId  = 4 --没有引用CTE自身必须放在第一个递归行之上union all  --没有引用CTE自身的语句和第一个递归行之间必须用UNION ALLselect a.Id,a.ParentId from [V_KPI_DetailsActivities] as a join Test_Recurs

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

if object_id('[tb]') is not null drop table [tb] go create table [tb]([modeid] int,modename varchar(20),parentid int) insert [tb] select 100 ,'商品管理', 0 union all select 101 ,'定单管理', 0 union all select 102 ,'用户管理', 0 union all select 104 ,'学院广告', 0 un

SQL递归获取树型路径中文名称

项目中遇到一个树型结构表要根据任意传入节点获取它从根节点一直到自身节点的全部路径的中文名称,并且用'>'与分隔. 我使用在sqlServer中写了一个解析函数方便开发调用. USE [RP_ERP] GO /****** Object: UserDefinedFunction [dbo].[Func_GetDeptPathName] Script Date: 01/09/2015 17:33:30 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIE

sql递归显示层级数据

;with catChild as(select *,cast(right('00000'+cast(Sort as varchar),5) as varchar(max)) as ssort from Category where ID = '123' union all select t.*, cast(ssort+right('00000'+cast(t.Sort as varchar),5) as varchar(max)) from catChild, Category t where

sql 递归(查找一个节点下的所有节点)

--这是查找菜单 第一行是一级菜单,下面是二级菜单 with temp as ( select MenuCode,ParentCode,MenuName,URL,1 as curMenuLevel from sys_menu where (ParentCode is null or ParentCode = '') and MenuCode='pms' union all select a.MenuCode,a.ParentCode,a.MenuName,a.URL, b.curMenuLeve

SQL实现递归及存储过程中In()参数传递解决方案[转]

SQL实现递归及存储过程中In()参数传递解决方案 1.SQL递归 在SQL Server中,我们可以利用表表达式来实现递归算法,一般用于阻止机构的加载及相关性处理. -->实现: 假设OrganiseUnit(组织机构表)中主要的三个字段为OrganiseUnitID(组织机构主键ID).ParentOrganiseUnitID(组织机构父ID).OrganiseName(组织机构名称) ? 1 2 3 4 5 6 7 [sql] with organise as (select * from

SQL入门经典(八) 之存储过程

存储过程(stored procedure)有时候称为sproc,它是真正的脚本-或者更准确的说,他是批处理(batch)-它存储于数据库中,而不是淡出的文件中.无论如何,这个比较并不是很确定.存储过程有输出参数,输入参数已及返回值等.而脚本不会有这些内容. 存储过程基本语法:CREATE PROCEDURE|PROC <sproc name> [<parameter name> <data type> [VARYING][<default value>]