如何仅对 SQL Server 2017 中的树叶求和?

How to sum only tree leafs in SQL Server 2017?

我只需要对如下组织的 table 的叶节点求和 (fiddle)。

create table test_1 (id int, parent_id int, name varchar(10), val int);
insert into test_1 values (1, null, 'ini 1', 1);
insert into test_1 values (2, null, 'ini 2', 2);
insert into test_1 values (3, null, 'ini 3', 3); -- to sum
insert into test_1 values (11, 1, 'lv 1 1', 4); -- to sum
insert into test_1 values (21, 2, 'lv 2 1', 5);
insert into test_1 values (221, 21, 'lv 2 2 1', 6);
insert into test_1 values (222, 21, 'lv 2 2 2', 7); -- to sum
insert into test_1 values (2221, 221, 'lv 2 2 2 1', 8); -- to sum
insert into test_1 values (2222, 221, 'lv 2 2 2 2', 9); -- to sum
insert into test_1 values (2223, 221, 'lv 2 2 2 3', 0); -- to sum

ini 1                 (1)
 |- lv 1 1            (4) <-
ini 2                 (2)
 |- lv 2 1            (5)
    |- lv 2 2 1       (6) <-
    |- lv 2 2 2       (7)
        |- lv 2 2 2 1 (8) <-
        |- lv 2 2 2 2 (9) <-
        |- lv 2 2 2 3 (0) <-
ini 3                 (3) <-

4 + 6 + 8 + 9 + 0 + 3 = 30

虽然实际 table 很大。如示例所示,获取所有叶节点总和的快速方法是什么?

正确的和似乎是 31 = (3 + 4 + 7 + 8 + 9 + 0)

select sum(val)
from test_1 t
where not exists (select *
                  from test_1 tt
                  where t.id=tt.parent_id);
31

link