zoukankan      html  css  js  c++  java
  • 数据库CTE递归查询

    1.已知表结构

    pft_Agent(agentCode,agentName,upAgentCode)

    2.查询某个节点的所有上级节点

    2.1 查询语句

    WITH cte
    AS (
    	SELECT agentCode,agentName,upAgentCode FROM dbo.pft_Agent
    	WHERE agentCode='000003'
    	UNION ALL
        SELECT  up.agentCode,up.agentName,up.upAgentCode FROM cte 
    	INNER JOIN dbo.pft_Agent up ON up.agentCode = cte.upAgentCode
    )
    select * FROM cte

    2.2 查询结果

    3.查询某个节点的所有下级节点

    3.1查询语句

    WITH cte
    AS (
    	SELECT agentCode,agentName,upAgentCode FROM dbo.pft_Agent
    	WHERE agentCode='000001'
    	UNION ALL
        SELECT  down.agentCode,down.agentName,down.upAgentCode FROM cte 
    	INNER JOIN dbo.pft_Agent down ON down.upAgentCode = cte.agentCode
    )
    select * FROM cte

    3.2查询结果

    4.将查询封装为一个函数

    4.1查询所有上级,含自己

    CREATE FUNCTION [dbo].[getUpAgent]
    (@agentCode NVARCHAR(50))
    RETURNS @returnTable TABLE 
    ( agentCode NVARCHAR(50))
    AS
    BEGIN
        WITH cte AS (
                    SELECT agentCode,agentName,upAgentCode FROM dbo.pft_Agent
                    WHERE agentCode=@agentCode
                    UNION ALL
                    SELECT  up.agentCode,up.agentName,up.upAgentCode FROM cte
                    INNER JOIN dbo.pft_Agent up ON up.agentCode = cte.upAgentCode
                        )
                        
        INSERT INTO @returnTable
        select agentCode FROM cte 
        
        RETURN 
    END

     4.2查询所有下级,含自己

    ALTER FUNCTION [dbo].[getDownAgent]
    (@agentCode NVARCHAR(50))
    RETURNS @returnTable TABLE 
    ( agentCode NVARCHAR(50))
    AS
    BEGIN
        WITH cte AS (
                            SELECT agentCode FROM dbo.pft_Agent
                            WHERE agentCode=@agentCode
                            UNION ALL
                            SELECT  down.agentCode  FROM cte
                            INNER JOIN dbo.pft_Agent down ON down.upAgentCode = cte.agentCode
                        )
                        
        INSERT INTO @returnTable
        select * FROM cte 
        
        RETURN 
    END
  • 相关阅读:
    JS完整获取IE浏览器信息
    C# DataSet和DataTable详解
    linux下mysql导入数据
    Linux上安装mysql
    JDK6+tomcat7+mysql官网下载地址
    Linux常用命令
    mysql 授权
    tomcat7.0学习笔记
    struts2 <s:property/>标签的使用输出时间格式转换
    Linux如何查找软件安装路径?
  • 原文地址:https://www.cnblogs.com/feihusurfer/p/11884635.html
Copyright © 2011-2022 走看看