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之下。所以我想要经理下所有工资的总和。请帮我整理一下
答案 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(应该是唯一的)(在您更新之前,它会给出错误的结果)。