• 关于TSQL层级关系的思路


    在项目中遇到了一个层级关系,情况如下,要在用户信息表中找到汇报给大区销售经理的员工信息(含汇报给大区销售经理的员工的员工),

    1 及:大区销售经理

    2级:汇报给大区销售经理的直接汇报对象

    3级:汇报给2级的直接对象;

    为了以后方便查找此资料,现在我把大区销售经理的id 看成2,T-SQL语句如下:

    T-SQL
    1 With temp_1 AS(
    2 SELECT ee.EmployeeID ,ee.LastName +' '+ee.FirstName as Name FROM Employees ee INNER JOIN Employees tt ON tt.EmployeeID = ee.ReportsTo
    3 WHERE tt.EmployeeID = 2
    4 ),
    5 temp_2 AS(
    6 SELECT EmployeeID,Name FROM temp_1
    7 UNION
    8 SELECT ee.EmployeeID,ee.LastName+' '+ee.FirstName as Name FROM Employees ee INNER JOIN temp_1 tt ON tt.EmployeeID = ee.ReportsTo
    9 )

    另一种方式是创建一个sql 的function

    View Code
     1 CREATE FUNCTION dbo.FnGetReports(@EmpolyeeID    AS INT)
    2 RETURNS @Reports TABLE
    3 (
    4 EmployeeID INT NOT NULL,
    5 ReportToID INT NULL
    6 )
    7 AS
    8 BEGIN
    9 DECLARE @Employee INT;
    10 INSERT INTO @Reports SELECT EmployeeID,ReportsTo FROM Employees WHERE EmployeeID=@EmpolyeeID;
    11 SELECT @Employee=MIN(EmployeeID) FROM Employees WHERE ReportsTo=@EmpolyeeID;
    12 WHILE @Employee IS NOT NULL
    13 BEGIN
    14 INSERT INTO @Reports SELECT * FROM dbo.FnGetReports(@Employee);
    15 SELECT @Employee = MIN(EmployeeID)
    16 FROM Employees
    17 WHERE EmployeeID>@Employee
    18 AND ReportsTo=@EmpolyeeID
    19 END
    20 RETURN
    21 END
    22 GO

    调用方式:

    1 DECLARE @EmployeeID    INT;
    2 SELECT @EmployeeID = 2;
    3 SELECT ee.EmployeeID,ee.LastName+' '+ ee.FirstName,tt.LastName+' '+TT.FirstName AS 'ReportTo'
    4 FROM Employees AS ee
    5 INNER JOIN DBO.FnGetReports(@EmployeeID) AS aa ON ee.EmployeeID = aa.EmployeeID
    6 INNER JOIN Employees tt ON tt.EmployeeID = aa.ReportToID




  • 相关阅读:
    Ansible Playbook 变量与 register 详解
    Ansible Playbook 初识
    Ansible Ad-Hoc与常用模块
    Ansible-免密登录与主机清单Inventory
    Ansible-安装配置
    Ansible-基本概述
    Linux tcpdump 命令详解与示例
    Linux 查看磁盘IO并找出占用IO读写很高的进程
    腾讯云部署Django成功,本地无法访问网页的解决办法
    CVM配置微信服务器之坑-待更新
  • 原文地址:https://www.cnblogs.com/hfliyi/p/2417142.html
Copyright © 2020-2023  润新知