本人对数据库了解有限,请各位高手帮忙。
背景:
有2个数据表单,表单"Location_tbl"记录着地区信息(树形结构)。结构为地域-国家-地区
表单“Device _tbl”记录着设备的信息。
"Location_tbl“与“Device _tbl”的关系如下
1. 每台设备总是属于一个地区
2.仅叶子节点可以拥有设备
3.Location_tbl中,loc_type = 1的节点为叶子节点地区可以拥有设备。
loc_type=2的节点只可以添加地区,不可以添加设备。
4. 地域节点(顶层节点)的loc_id = NULL
希望的结果是,统计每个地域(顶层节点)下面各个国家(第一层节点) 拥有设备的总数。(即该国家下所有最底层地区(叶子节点)包含的设备的总数)本人也查过怎么用WITH来实现递归,但是好像挺难实现这个需求的。请有经验的朋友帮个忙,给个提示也行。
谢谢!!
表单结构如图所示

解决方案 »

  1.   

    直接group by Country行不行?
      

  2.   

    当然不是那么简单啦,要递归的。要是一个groupby能搞定就好了
    谢谢你的帮助
      

  3.   

    表的结构应该没什么问题,如果要按国家汇总,首先要列出省市和国家的对应表
    locID(省市ID),CountryID(国家ID),RegionID(地区ID,如只列国家,则不要)with t as (select loc_id,parent_id FROM LOCATION WHERE parent_id is null) --列出地区
    ,t1 as (select a.loc_id as  locID,a.loc_id as countryID,a.Parent_id as RegionID 
    from LOCATION A JOIN T B ON A.parent_id=B.loc_id
    union all 
    select  C.loc_id,D.CountryID,D.RegionID from LOCATION C JOIN t1 D ON C.parent_id=D.locID)
    SELECT t1.RegionID,t1.locID,Count(1) as qtyOfDevice FROM t1 join Device E ON T1.LocID=E.Loc_id
    group by t1.locID,t1.RegionID
      

  4.   

    非常感谢lhblxm的帮助,和我想要的结果已经很接近了
    locID这一列,我需要第一层国家的ID就行了,不用具体到location
    意思是,RegionA - CountryA 这层就行了 
    我再看看如何修改
    thx!
      

  5.   

    只要多加一个select的时候取CountryID就行了
    谢了!