Oracle的列转行和对流数据查询SQL脚本

需求:对发件地和目的地的数据进行对流情况查询,
要求如下:某 发件地A --> 发件地B 所在行的下一行数据为:发件地B-->发件地A的返回数据,
即对流情况的两条数据。

目前已有的数据结构情为:
已有数据结构
想要达到的结果为:
目的结果
根据已有目录结构及维度表,进行关联得到如下结构:

create table test_20180104 as
select d1.domain_name 发件地1,
       d2.domain_name 目的地1,
       sum(t1.dcl_qj) 取件达成率1,
       sum(t1.dcl_zy) 转运达成率1,
       sum(t1.dcl_pj) 派件达成率1,
       sum(t1.dcl) 全程达成率1,
       d2.domain_name 发件地2,
       d1.domain_name 目的地2,
       sum(t2.dcl_qj) 取件达成率2,
       sum(t2.dcl_zy) 转运达成率2,
       sum(t2.dcl_pj) 派件达成率2,
       sum(t2.dcl) 全程达成率2
  from t_se_qcsx_zxwdpm t1
  join dim_domain d1
    on t1.site_start = d1.domain_id
  join dim_domain d2
    on t1.site_end = d2.domain_id
  left join t_se_qcsx_zxwdpm t2
    on t1.site_start = t2.site_end
   and t1.site_end = t2.site_start
 where t1.type = 1
 group by d1.domain_name, d2.domain_name
 order by sum(t1.dcl) desc

查询结果:
初步处理后结果
当前的表结构已可供前台处理使用,后面进一步优化处理,虚拟出来一个序号,对各行字段进行奇偶数赋值,SQL如下:

select 序号,发件地,目的地,取件达成率,转运达成率,派件达成率,全程达成率 from (
--对奇数行赋值序号
select (2*rownum-1) 序号,t1.发件地1 发件地,t1.目的地1 目的地,t1.取件达成率1 取件达成率,t1.转运达成率1 转运达成率,t1.派件达成率1 派件达成率,t1.全程达成率1 全程达成率
  from test_20180104 t1
union all
--对偶数行赋值序号
select 2*rownum 序号,t2.发件地2 发件地,t2.目的地2 目的地,t2.取件达成率2 取件达成率,t2.转运达成率2 转运达成率,t2.派件达成率2 派件达成率,t2.全程达成率2 全程达成率
  from test_20180104 t2
  ) order by 序号
;

查询结果为:
目的结果

至此,查询结束,步骤稍显复杂,但处理的逻辑还可以进一步优化,有时间再来考虑怎么优化吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值