Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
TSQL:从层次结构的顶部到底部的总和_Tsql_Recursive Query - Fatal编程技术网

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您是对的,我已经更正了我的查询,抱歉。