zoukankan      html  css  js  c++  java
  • sql server 递归汇总 按指定层级汇总

    每个地区递归层级可能不一致,数据表(table)存放最小层级地区 area --地区层级表 id name f_id leve 1 中国 0 1 2 湖北 1 2 3 武汉 2 3 ...

    --测试数据
    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"
    having t."level"=2 --筛选出第二层级
    order by t.id

    结果:

    --语句设计的很好,参考一下

    转:http://zhidao.baidu.com/link?url=Wevi5LnFNIn66I60bjk7_x8yaTfD2-acH37Zhgmp_5drupcAQ30DciqpG6Ypo7xPaSHInqfItrAMUx1srOuvpT8XjMXvYlzXEV6X8bvbUnW

  • 相关阅读:
    npm
    幻灯片插件
    运用PhantomJS测试JavaScript
    C++——C++与C语言中的一些基础区别
    C++——C语言中的一些常见误区
    C++——左右值及函数重载的一些问题
    基本算法——约瑟夫环问题
    基本算法——for循环的使用之魔方阵实现
    基本算法——字符串查找之KMP算法
    基本算法——函数指针问题
  • 原文地址:https://www.cnblogs.com/wangfuyou/p/5915322.html
Copyright © 2011-2022 走看看