TSQL:从层次结构的顶部到底部的总和
我正在尝试做一些关于多层次结构的运行总计 样本表。我添加了空格来强调分组TSQL:从层次结构的顶部到底部的总和,tsql,recursive-query,Tsql,Recursive Query,我正在尝试做一些关于多层次结构的运行总计 样本表。我添加了空格来强调分组 +----------------+----------------+------------+ | Manager | Employee | Cost | +----------------+----------------+------------+ | Donald Torres | Pamela Jordan | 7,250.78 | |
+----------------+----------------+------------+
| Manager | Employee | Cost |
+----------------+----------------+------------+
| Donald Torres | Pamela Jordan | 7,250.78 |
| | | |
| Pamela Jordan | Harry Rivera | 36,721.39 |
| Pamela Jordan | Ryan Mcdonald | 5,593.89 |
| | | |
| Harry Rivera | Bruce Mccoy | 3,538.19 |
| | | |
| Ryan Mcdonald | Shirley Ortiz | 137.20 |
| Ryan Mcdonald | Roger Gardner | 9,140.34 |
| Ryan Mcdonald | Paula Richards | 135,109.59 |
| | | |
| Paula Richards | Andrew Boyd | 106,676.77 |
+----------------+----------------+------------+
期望输出
+----------------+----------------+------------+
| Manager | Employee | Cost |
+----------------+----------------+------------+
| Donald Torres | Pamela Jordan | 304,168.15 |
| Pamela Jordan | Harry Rivera | 40,259.58 |
| Pamela Jordan | Ryan Mcdonald | 256,657.79 |
| Harry Rivera | Bruce Mccoy | 3,538.19 |
| Ryan Mcdonald | Shirley Ortiz | 137.20 |
| Ryan Mcdonald | Roger Gardner | 9,140.34 |
| Ryan Mcdonald | Paula Richards | 241,786.36 |
| Paula Richards | Andrew Boyd | 106,676.77 |
+----------------+----------------+------------+
为给出不正确的期望输出而道歉。我已经更新了表格
基本上,这是基于初始表的层次结构的外观:
Donald Torres
Pamela Jordan 7,250.78
Harry Rivera 36,721.39
Bruce Mccoy 3,538.19
Ryan Mcdonald 5,593.89
Shirley Ortiz 137.20
Roger Gardner 9,140.34
Paula Richards 135,109.59
Andrew Boyd 106,676.77
关于期望的产出,Paula Richards应该得到Paula Richards(她的成本)+Andrew Boyd的总和。Ryan Mcdonald将把Ryan Mcdonald(hir成本)的总额减至Andrew Boyd。哈里·里维拉只会是哈里·里维拉+布鲁斯·麦考伊。最后,帕梅拉·乔丹将把帕梅拉·乔丹(她的费用)的总额减至安德鲁·博伊德
我正在尝试用SQL 2008R2编写查询
更新:添加cte基表
With Tabl_1 (Manager, Employee, Cost) as (
Select 'Donald Torres' , 'Pamela Jordan' , 7250.78 UNION ALL
Select 'Pamela Jordan' , 'Harry Rivera' , 36721.39 UNION ALL
Select 'Pamela Jordan' , 'Ryan Mcdonald' , 5593.89 UNION ALL
Select 'Harry Rivera' , 'Bruce Mccoy' , 3538.19 UNION ALL
Select 'Ryan Mcdonald' , 'Shirley Ortiz' , 137.20 UNION ALL
Select 'Ryan Mcdonald' , 'Roger Gardner' , 9140.34 UNION ALL
Select 'Ryan Mcdonald' , 'Paula Richards' , 135109.59 UNION ALL
Select 'Paula Richards' , 'Andrew Boyd' , 106676.77
)
我认为这个问题符合你的需要
With Table_1 (Manager, Employee, Cost) as (
Select 'Donald Torres' , 'Pamela Jordan' , 7250.78 UNION ALL
Select 'Pamela Jordan' , 'Harry Rivera' , 36721.39 UNION ALL
Select 'Pamela Jordan' , 'Ryan Mcdonald' , 5593.89 UNION ALL
Select 'Harry Rivera' , 'Bruce Mccoy' , 3538.19 UNION ALL
Select 'Ryan Mcdonald' , 'Shirley Ortiz' , 137.20 UNION ALL
Select 'Ryan Mcdonald' , 'Roger Gardner' , 9140.34 UNION ALL
Select 'Ryan Mcdonald' , 'Paula Richards' , 135109.59 UNION ALL
Select 'Paula Richards' , 'Andrew Boyd' , 106676.77
),
CTE as
(
select Manager as Manager, Employee as Employee, 1 as Level, Cost as Cost
from Table_1
Union All
select C.Manager, T.Employee, C.Level + 1, T.Cost
from CTE as C inner join Table_1 as T on C.Employee = T.Manager
)
select Manager,
Employee,
T_Cost = Cost + isnull((select SUM(Cost)
from CTE C2
where C2.Manager = C1.Employee)
,0)
from CTE C1
where Level = 1
期望的输出非常混乱。为什么所有其他组都有一个非常大的累积值,而哈利/布鲁斯系列却没有?为什么瑞安·麦克唐纳/罗杰·加德纳没有包括雪莉·奥尔蒂斯的值?您如何确定每位经理的员工顺序?嗨@BaconBits。确定每位经理的员工顺序也是我的问题。不确定使用递归queryHi@Polux2是否可以实现这一点。抱歉,它没有得到所需的输出。@ggarcia您是对的,我已经更正了我的查询,抱歉。