如何编写统计查询的sql语句?

0
1.Grid表

ID           NUMBER(19) --行政ID                               

RIBBON_CODE  VARCHAR2(255 CHAR)--行政区号                                            

TOPGRID_ID   NUMBER(19)          --上级行政ID 

 

2.Material表

ID                   NUMBER(30)  --物资ID 

NAME                 VARCHAR2(255 CHAR)      --资源名称                                         

RESOURCE_TYPE_ID     NUMBER(30)            -- 资源类型ID

 

3.protect_entity_materials 表(主表)

ID                   NUMBER(30)  --储备物资ID

GRID_ID              NUMBER(30)         -—行政区划ID

MATERIAL_MUMBER      NUMBER(19,4)       -—存储物资数量

MATERIAL_ID          NUMBER(30) –-存储的物资ID

4.resource_type 表

ID            NUMBER(19)   --资源类型ID

TOP_TYPE_ID   NUMBER(19) –-上级资源类型

TYPE_CODE     VARCHAR2(255 CHAR)   --资源代号

 

 

采用Oracle数据库,其中grid 表为行政区化表,他是递归结构的,也就是说,深圳市下面有龙岗区,罗湖区,南山区。。。,龙岗区下面又有荷坳,坳背。。。依次类 推,resource_type 表资源类型表,也是递归结构也就是根类型下面还有子类型,现在比较头疼的问题就是,如何进行逐级的汇总?

最终要查询的效果(根据物资类型进行统计,深圳市下面一共十个区,查询每个区的储备物资数量):

地区               统计                 资源类型

罗湖区               45510            国家战略性储备物资 

罗湖区              89237             专用应急物资及储备

罗湖区               16723             基本生活物资保障    

罗湖区                 0                通信设备

罗湖区                 0                运输设备

罗湖区                 0                医疗设备和药品

福田区               37816           国家战略性储备物资

福田区                13244          专用应急物资及储备

。                      。                    。

。                          。                    。

。                          。                    。

 

因为是采用SSRS的报表形式展现,他最后的要求呈现的结果如下图:

QQ截图20160414222740.png

下面是我自己写的一些sql代码,但是是有问题的。。。

select sum(nvl(p.material_mumber,0)) as "统计",r.type_name as "物资类型",g.name as "行政区域"
from protect_entity_materials p, material m ,
(
     select * from RESOURCE_TYPE r1
where exists (select * from RESOURCE_TYPE r2 where r1.top_type_id=r2.top_type_id and r2.type_code='43A00')
) r,--获取物资的根类型
(
  select * from grid g1
where exists (select * from grid g2 where g1.topgrid_id=g2.topgrid_id and g2.ribbon_code='440303')
) g --获取各个区的信息
where p.grid_id in (select g3.id
                       from grid g3
                      start with g3.ribbon_code = g.ribbon_code--递归查询某一行政区域的所有子区域
                     connect by prior g3.id = g3.topgrid_id)
   and p.material_id = m.id
   and r.id = m.resource_type_id
   and g.id = p.grid_id
   and m.resource_type_id in
       (select r3.id
          from resource_type r3
         start with r3.id = r.id--递归查询某一分类下的所有的子分类
        connect by prior r3.id = r3.top_type_id)
 group by r.type_name,g.name;

本人刚毕业,刚找到工作,小菜鸟一只,过几天老大就要我交东西了,还请前辈们多多指导一下,这个统计的sql该怎么写,小弟不胜感激!!!
已邀请:
0

- 取是能力,舍是境界 2016-04-14 回答

你不用在SQL里实现这种列组的层次,在SSRS中矩阵本身就支持这种列组的层次显示的。
 
如下图,我的箱型和尺寸只是一行数据的两列属性。像很常见上层是年度,下层是季度,再下层是月度这样。
QQ截图20160414224808.jpg

 

要回复问题请先登录注册