SQL根据从上到下的层次结构添加值,从上到下求和

Law*_*udo 0 sql t-sql sql-server

我正在做的概念是对从较高级别到较低级别的总等待时间求和。并获得该特定实体的总等待时间。下面是层次结构级别的图片:

1

我的最终输出应该是这样的。

2

本例解释了总等待时间。总等待时间:

一 = 1

乙 = 1 + 2 = 3

C = 1 + 3 = 4

D = 1 + 2 + 4 = 7

E = 1 + 2 + 5 = 8

F = 1 + 3 + 6 = 10

G = 1 + 3 + 7 = 10

我有一个想法,将表格与自己连接起来,但不知何故它不起作用,但不知何故它没有显示预期的结果。有一个更好的方法吗?谢谢!:(

esh*_*ana 5

您可以使用recursive cte如下所示:

WITH cte AS (
    SELECT *, waitingTime AS TotalWaitingTime
    FROM waitingTime
    UNION ALL
    SELECT w.*, TotalWaitingTime + w.waitingTime
    FROM waitingTime w
    JOIN cte ON w.ParentObject = cte.Object
)
SELECT
    object,
    ParentObject,
    waitingTime,
    MAX(TotalWaitingTime) TotalWaitingTime
FROM  cte
GROUP BY  object,ParentObject,waitingTime
GO
Run Code Online (Sandbox Code Playgroud)
目的 父对象 等待的时间 总等待时间
一种 1 1
一种 2 3
C 一种 3 4
D 4 7
5 8
F C 6 10
G C 7 11

db<>在这里摆弄