本人对数据库了解有限,请各位高手帮忙。
背景:
有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来实现递归,但是好像挺难实现这个需求的。请有经验的朋友帮个忙,给个提示也行。
谢谢!!
表单结构如图所示
背景:
有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来实现递归,但是好像挺难实现这个需求的。请有经验的朋友帮个忙,给个提示也行。
谢谢!!
表单结构如图所示
谢谢你的帮助
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
locID这一列,我需要第一层国家的ID就行了,不用具体到location
意思是,RegionA - CountryA 这层就行了
我再看看如何修改
thx!
谢了!