当前位置: 代码迷 >> Oracle开发 >> 求一SQL语句,解决办法
  详细解决方案

求一SQL语句,解决办法

热度:241   发布时间:2016-04-24 08:03:28.0
求一SQL语句,急!!!
两个表
表一
A B C
a1 b1 c1
a1 b2 c2
a1 b3 c3
a2 b2 c1
a2 b4 c4

表二
A D
a1 d1
a1 d2
a2 d3


需要得到的结果
A B C D
a1 b1 c1 d1
a1 b2 c2 d2
a1 b3 c3
a2 b2 c1 d3
a2 b4 c4


------解决方案--------------------

select nvl(a.a,b.a),a.b,a.c,b.d
from 
(select *,row_number()over(partition by a order by a) as num from a) a
full join 
(select *,row_number()over(partition by a order by a) as num from b) b
on a.a=b.a and a.num=b.num


------解决方案--------------------
SELECT nvl(a.a,b.a)a,a.b,a.c,b.d
FROM (SELECT table1.*,row_number()OVER(PARTITION BY A ORDER BY b)rn FROM table1)A
FULL JOIN(SELECT table2.*,row_number()OVER(PARTITION BY A ORDER BY d)rn FROM table2)b
on a.a=b.a and a.rn=b.rn
------解决方案--------------------
SQL code
with table1 as(  select 'a1' A,'b1' B, 'c1' C from dual union all  select 'a1' A,'b2' B, 'c2' C from dual union all  select 'a1' A,'b3' B, 'c3' C from dual union all  select 'a2' A,'b2' B, 'c1' C from dual union all  select 'a2' A,'b4' B, 'c4' C from dual),  table2 as(  select 'a1' A, 'd1' D from dual union all  select 'a1' A, 'd2' D from dual union all  select 'a2' A, 'd3' D from dual)    SELECT t1.A, t1.B, t1.C, t2.D    FROM (SELECT t.*, row_number() over(PARTITION BY A ORDER BY A, B, C) rn FROM table1 t) t1,         (SELECT t.*, row_number() over(PARTITION BY A ORDER BY A, D) rn FROM table2 t) t2   WHERE t1.A = t2.A(+) AND         t1.rn = t2.rn(+)   ORDER BY t1.A, t1.B, t1.C;
  相关解决方案