展开树子节点之和为父节点的值,怎么处理

image.png

FineReport fangqing 发布于 2021-7-28 16:32
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
snrtuemcLv8专家互助
发布于2022-1-29 13:17
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-7-28 16:41

给你一个SQL

--测试数据

with area(id,"name",f_id,leve) as (

  select  1,'中国',0,1 union all

  select  2,'湖北',1,2 union all

  select  3,'武汉',2,3 union all

  select  4,'云贵',1,2 union all

  select  5,'云南',4,3 union all

  select  6,'贵阳',4,3 union all

  select  7,'云南子区',5,4 union all

  select  8,'贵阳子区',6,4 union all

  select  9,'蔡甸',2,3

), "table"(id,area_id,"money") as (

  select  1,3,10 union all

  select  2,9,5 union all

  select  3,7,20 union all

  select  4,8,30

)

--使用cte递归求出每个节点的路径

,t(id,f_id,"name","level",fullpath) as (

  select a.id,a.f_id,a."name",a.leve,cast(a.id as varchar(max))

  from area a

  where a.leve=1

  union all

  select b.id,b.f_id,b."name",b.leve,t.fullpath+'->'+cast(b.id as varchar(max))

  from area b

  inner join t on t.id=b.f_id

)

--汇总统计每个节点的金额

select t.id,t."name",t."level",sum(c."money") as "money"

from t

inner join t t1 on charindex(t.fullpath,t1.fullpath)=1

inner join "table" c on c.area_id=t1.id

group by t.id,t."name",t."level"

order by t.id

  • fangqing fangqing(提问者) 如果用帆软报表的功能来实现呢?不用SQL来做
    2021-07-28 16:58 
  • Z4u3z1 Z4u3z1 回复 fangqing(提问者) 写不出
    2021-07-28 17:01 
  • 2关注人数
  • 334浏览人数
  • 最后回答于:2022-1-29 13:17
    请选择关闭问题的原因
    确定 取消
    返回顶部