需求:對發件地和目的地的資料進行對流情況查詢,
即對流情況的兩條資料。
目前已有的資料結構情為:
想要達到的結果為:
根據已有目錄結構及維度表,進行關聯得到如下結構:
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
bysum(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 序號
;
查詢結果為:
至此,查詢結束,步驟稍顯複雜,但處理的邏輯還可以進一步優化,有時間再來考慮怎麼優化吧。
oracle的列轉行
首先建立測試環境 create table test1 user account varchar2 100 signup date date,user email varchar2 100 friend1 email varchar2 100 friend2 email varchar2 100 f...
Oracle行轉列和列轉行
1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6 score...
Oracle行轉列和列轉行
一 行轉列 1.1 初始測試資料 表結構 test tb grade sql 1 create table test tb grade 2 3 id number 10 not null,4 user name varchar2 20 char 5 course varchar2 20 char 6...