当前位置: 代码迷 >> Sql Server >> 树形结构查询从父节点查寻所有底层子节点并统计
  详细解决方案

树形结构查询从父节点查寻所有底层子节点并统计

热度:3   发布时间:2016-04-24 09:37:09.0
树形结构查询从父节点查找所有底层子节点并统计
表结构如下:

pid      id                 sl
a         a1               2
a         b1               1
a1       a11              2
a1       a12              3
b1       a11              1
b1        b11              1
统计结果

pid    id              sl
a       a11            5
a       a12            6 
a       b11            1
 
------解决思路----------------------
WITH table1(pid,id,sl) AS (
    SELECT 'a','a1',2 UNION ALL
    SELECT 'a','b1',1 UNION ALL
    SELECT 'a1','a11',2 UNION ALL
    SELECT 'a1','a12',3 UNION ALL
    SELECT 'b1','a11',1 UNION ALL
    SELECT 'b1','b11',1
)
,tree AS (
    SELECT pid rootid, *
      FROM table1
     WHERE NOT EXISTS (SELECT * FROM table1 t WHERE t.id = table1.pid)
    UNION ALL
    SELECT p.rootid, c.pid, c.id, p.sl + c.sl
      FROM tree p
      JOIN table1 c
        ON c.pid = p.id
)
,leaf AS (
    SELECT *
      FROM tree l
     WHERE NOT EXISTS (SELECT * FROM tree c WHERE l.id = c.pid)
)
SELECT rootid pid, id, sum(sl) sl
  FROM leaf
GROUP BY rootid, id

pid  id            sl
---- ---- -----------
a    a11            6
a    a12            5
a    b11            2
  相关解决方案