想要获得经理下所有员工的工资总额

时间:2018-06-14 08:46:47

标签: sql-server

MS SQL Server 我想要所有员工的工资总额以及经理薪水在单一经理下

CREATE TABLE #empsal
(
Empid int,
empname varchar(50),
managerid int,
salary int
)

INSERT INTO #empsal
VALUES
(1  ,   'manager'   ,   NULL    ,   500),
(2  ,   'manager1'  ,   NULL    ,   600),
(3  ,   'd' ,   1   ,   100),
(4  ,   'f'     ,   3   ,   200),
(5  ,   'g' ,   4   ,   300),
(6  ,   'h' ,   2   ,   800),
(8  ,   'j' ,   6   ,   200),
(7  ,   'I' ,   6   ,   140),
(8  ,   'j' ,   6   ,   200)

我想要的结果如下 工资总额

1           1100(500+100+200+300)   
2           1940 (600+800+200+140+200)

这里员工3的经理为1,员工4的经理为3,员工5的经理为4,因此所有员工都在经理1之下。所以我想要经理下所有工资的总和。请帮我整理一下

1 个答案:

答案 0 :(得分:1)

使用递归CTE将经理与每位员工联系起来,然后按最高者分组。

;WITH Relationships AS
(
    SELECT
        TopManagerID = E.Empid,
        RelatedEmployeeID = E.Empid
    FROM
        #empsal AS E
    WHERE
        E.managerid IS NULL

    UNION ALL

    SELECT
        TopManagerID = E.TopManagerID,
        RelatedEmployeeID = X.Empid
    FROM
        Relationships AS E
        INNER JOIN #empsal AS X ON E.RelatedEmployeeID = X.managerid
)
SELECT 
    R.TopManagerID,
    SumSalary = SUM(E.salary)
FROM
    Relationships AS R
    INNER JOIN #empsal AS E ON R.RelatedEmployeeID = E.Empid
GROUP BY
    R.TopManagerID

请注意,您的样本数据中有2位员工ID为8(应该是唯一的)(在您更新之前,它会给出错误的结果)。