ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 报表表样多excel表格与sql查询结果一一匹配_order by decode and 中间表

报表表样多excel表格与sql查询结果一一匹配_order by decode and 中间表

原创 Linux操作系统 作者:wisdomone1 时间:2013-03-05 10:05:37 0 删除 编辑

 前言:报表是根据地区归属分为多个excel表格来填写的。而有些归属地的表格可能
       根据报表统计无数据。但为了sql查询与excel表格一一匹配对应;这样填充
       报表时可以顺序进行,不用交叉检查匹配,节省了大量时间;但如何令未
       查询出来的归属也在sql查询中显示一行呢;
 正文:
 
 --构建测试               a为归属地      b为指标      
SQL> create table t_match(a varchar2(100),b int);
 
Table created
--插入示例数据
SQL> insert into t_match values('渭南市',1);
 
1 row inserted
 
SQL> insert into t_match values('宝鸡市',2);
 
1 row inserted
 
SQL> insert into t_match values('咸阳市',3);
 
1 row inserted
 
SQL> insert into t_match values('商洛市',4);
 
1 row inserted
 
SQL> commit;
 
Commit complete
--查看示例表数据
SQL> select * from t_match;
 
A                                                                                                                      B
-------------------------------------------------------------------------------- ---------------------------------------
渭南市                                                                                                                 1
宝鸡市                                                                                                                 2
咸阳市                                                                                                                 3
商洛市                                                                                                                 4


--实现的效果大致如下:
A                 B
---------------------
渭南市            1           
咸阳市            3
汉中市            NULL
商洛市            4
宝鸡市            2

--分析
1,按指定的列值排序,可采用order bydecode(a,'',1,'',2)
2, 如何把汉中市合并显示在查询结果中
3,看这个样子,一个表难以实现;借助中间表,
  此表结构为:
  create table t_map(a varchar2(100),orig_col int);
  create sequence seq_map start with 1;
  insert into t_map values('渭南市',seq_map.nextval);
  insert into t_map values('咸阳市',seq_map.nextval);
  insert into t_map values('汉中市',seq_map.nextval);
  insert into t_map values('商洛市',seq_map.nextval);
  insert into t_map values('宝鸡市',seq_map.nextval);
  commit;
 
 
  --运行符合查询结果的sql
  select t_map.a,
         t_match.b
  from t_match,
       t_map
  where t_match.a(+)=t_map.a
  order by t_map.orig_col;
       
--附上最终运行结果
SQL>   select t_map.a,
  2           t_match.b
  3    from t_match,
  4         t_map
  5    where t_match.a(+)=t_map.a
  6    order by t_map.orig_col;
 
A                                                                                                                      B
-------------------------------------------------------------------------------- ---------------------------------------
渭南市                                                                                                                 1
咸阳市                                                                                                                 3
汉中市                                                                          
商洛市                                                                                                                 4
宝鸡市                                                                                                                 2
        

--如果仅是单表且报表表样的excel表格不太多的情况下
--此法的优点:不用创建中间表
        缺点:可能有些归属地查询无结果,与报表表样不一一对应,需要部分进行核对填写,稍多费一点人力
可采用如下sql
select a,b
from t_match
order by decode(a,'渭南市',1,'咸阳市',2,'汉中市',3,'商洛市',4,'宝鸡市',5);
        

小结:1,中间表

         2,左连接

         3,order by

          4,decode

           5,decode转换值各为序列值1,2,3

           6,序列(其实与5道理相同)

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-755293/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
提供针对oracle初学者及进阶的数据库培训,欢迎大家咨询: 微信: wisdomone 微信公众号: lovedb 工作经历: 中国普天 北京科蓝 北京云和恩墨 北京神州新桥

注册时间:2008-04-04

  • 博文量
    2189
  • 访问量
    12686892