如何将多个SQL查询统计结果一次显示出来

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 04:08 点击:

 

我们经常会碰到各种分类统计,有时需要将这些统计结果一次显示出来,并计算分类统计占总量的比例,例如:一段时间内每日设备销售总量、台式机销量、笔记本销量等,我的工作中也碰到类似问题,我们需要统计一段时间内邮件收寄总量、自收总量、妥投总量、自投总量和自收自投总量等,以统计2011年10月16-22日合肥到安庆邮件为例,其查询语句如下:

 

--收寄总量:

select a.clct_date,count(*) from tb_evt_mail_clct a

 where a.clct_date>=to_date('20111016','yyyymmdd') and a.clct_date<=to_date('20111022','yyyymmdd')

 and exists (select 1 from tb_jg b where b.zj_code=a.clct_bureau_org_code and b.city ='合肥市')

 and exists (select 1 from tb_jg d where d.xs_code=substr(a.rcv_area,1,4) and d.city ='安庆市')

  group by a.clct_date order by a.clct_date;

 

--自收总量:

select a.clct_date,count(*) from tb_evt_mail_clct a

 where a.clct_date>=to_date('20111016','yyyymmdd') and a.clct_date<=to_date('20111022','yyyymmdd')

 and exists (select 1 from sncn_zd_jg b where b.zj_code=a.clct_bureau_org_code and b.city ='合肥市')

 and exists (select 1 from tb_jg d where d.xs_code=substr(a.rcv_area,1,4) and d.city ='安庆市')

  group by a.clct_date order by a.clct_date;

 

--妥投总量:

select a.clct_date,count(*) from tb_evt_mail_clct a,tb_evt_dlv c

 where a.clct_date>=to_date('20111016','yyyymmdd') and a.clct_date<=to_date('20111022','yyyymmdd')

  and a.mail_num=c.mail_num and c.dlv_sts_code='I'

 and exists (select 1 from tb_jg b where b.zj_code=a.clct_bureau_org_code and b.city ='合肥市')

 and exists (select 1 from tb_jg d where d.zj_code=c.dlv_bureau_org_code and d.city ='安庆市')

  group by a.clct_date order by a.clct_date;

 

--自投总量:

select a.clct_date,count(*) from tb_evt_mail_clct a,tb_evt_dlv c

 where a.clct_date>=to_date('20111016','yyyymmdd') and a.clct_date<=to_date('20111022','yyyymmdd')

  and a.mail_num=c.mail_num and c.dlv_sts_code='I'

 and exists (select 1 from tb_jg b where b.zj_code=a.clct_bureau_org_code and b.city ='合肥市')

 and exists (select 1 from sncn_zd_jg d where d.zj_code=c.dlv_bureau_org_code and d.city ='安庆市')

  group by a.clct_date order by a.clct_date;

 

--自收自投总量:

 select a.clct_date,count(*)  from tb_evt_mail_clct a,tb_evt_dlv c

 where a.clct_date>=to_date('20111016','yyyymmdd') and a.clct_date<=to_date('20111022','yyyymmdd')

  and a.mail_num=c.mail_num and c.dlv_sts_code='I'

 and exists (select 1 from sncn_zd_jg b where b.zj_code=a.clct_bureau_org_code and b.city ='合肥市')

 and exists (select 1 from sncn_zd_jg d where d.zj_code=c.dlv_bureau_org_code and d.city ='安庆市')

  group by a.clct_date order by a.clct_date;

 

将每个查询结果看着是一个表,使用join关键字将所有的查询连接起来,就可以一次显示所有查询结果,语句如下:

 

select aa.rq,aa.sjzl,bb.zszl,cc.ttzl,dd.ztzl,ee.zszt from

(select a.clct_date rq,count(*) sjzl from tb_evt_mail_clct a

 where a.clct_date>=to_date('20111016','yyyymmdd') and a.clct_date<=to_date('20111022','yyyymmdd')

 and exists (select 1 from tb_jg b where b.zj_code=a.clct_bureau_org_code and b.city ='合肥市')

 and exists (select 1 from tb_jg d where d.xs_code=substr(a.rcv_area,1,4) and d.city ='安庆市')

  group by a.clct_date order by a.clct_date) aa

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • sql常见面试题
      • SQL SERVER 2005性能之跟踪
      • SQL编程(一)
      • LINUX上RMAN自动备份脚本
      • sql server面试题
      • 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
      • 如何将多个SQL查询统计结果一次显示出来
      • SQL小技巧系列 --- 行转列合并
      • sql server 列转行
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1