首页 > 解决方案 > 使用 SUM 进行递归连接

问题描述

我有以下格式的数据:

FromStateID ToStateID Seconds
1           2         10
2           3         20
3           4         15
4           5         5

我需要以下输出

FromStateID ToStateID Seconds
1           2         10
2           3         20
3           4         15
4           5         5
1           3         10+20
1           4         10+20+15
1           5         10+20+15+5
2           4         20+15
2           5         20+15+5
3           5         15+5

此输出按时间顺序显示每个组合花费FromStateId的总时间。ToStateId

请帮忙。

标签: sqlsql-servertsqlcommon-table-expression

解决方案


我认为这是一个遵循链接的递归 CTE:

with cte as (
      select FromStateID, ToStateID, Seconds
      from t
      union all
      select cte.FromStateId, t.ToStateId, cte.Seconds + t.Seconds
      from cte join
           t
           on cte.toStateId = t.FromStateId
     )
select *
from cte;

是一个 db<>fiddle。


推荐阅读